Imprimir

Manual de Bash: funciones

Funciones

Una función es un conjunto de comandos a los que se da un nombre, de manera que puedan ser ejecutados desde cualquier punto del script llamando a la función mediante ese nombre.

  • Antes de llamar una función debemos definirla. La sintaxis es:
    function nombre_funcion () {
        Bloque
    }
  • Una vez definida la función se convierte en un "comando posible" dentro del script, al que se le pueden pasar argumentos que se procesan de la misma forma: $1, $2, etc. se corresponden con el primer parámetro, segundo, etc.
  • Al igual que un script devuelve un valor que podemos establecer con exit, podemos hacer que una función devuelva un valor con el comando return, que se usa igual que exit.

En el siguiente ejemplo definimos una función que se ejecuta si se le pasa un número de argumentos distinto de 2, o si el segundo argumento no es un archivo existente: si los argumentos no son adecuados llamamos a la función uso que explica al usuario cómo se debe llamar el script. Esta estrategia es muy útil y frecuente en scripts complejos con muchas opciones:

#!/bin/bash
function uso () {
    echo "Este script recibe dos argumentos."
    echo "El primero debe ser windows o linux ,"
    echo "y el segundo debe ser un archivo existente."
    echo " "
    }
if [ $# -ne 2 ]; then
    uso
    exit 1
fi
case $1 in
    windows)
        if [ -e $2 ]; then
           echo "El script windows termino con exito"
           exit 0
        else
            uso
            exit 1
        fi
        ;;
    linux)
        if [ -e $2 ]; then
            echo "El script linux termino con exito"
            exit 0
        else
            uso
            exit 1
        fi
        ;;
    *)
        uso
        exit 1
        ;;
esac

En el siguiente ejemplo vamos a ver cómo utilizar el comando shift para trabajar con argumentos. La función lista_parametros recibe varios parámetros y usando shift recortamos la lista de argumentos una posición quitando el primero de ellos: $1 vale $2, $2 vale $3, etc. De esta manera, imprimimos el primer argumento, ejecutamos shift y volvemos a imprimir el primer argumento (que ahora es el segundo) y así hasta el final, habiendo conseguido imprimir todos los argumentos.

#!/bin/bash
function lista_parametros () {
    echo "Se ha llamado a lista_parametros, con $#"
    echo "parametros. Mostrando los parametros:"
    echo " "
    b=7
    numparms=$#
    local j=1
    while [ $j -le $numparms ]; do
        echo "El parametro $j contiene $1"
        shift
        local j=$[$j+1]
        done
}
lista_parametros a b c d dsfafd d
echo $b
echo $j

Deja un comentario