FUNCIONES

Las funciones en Bash tienen una sintaxis similar a la de cualquier lenguaje de programación:

mi_funcion() {
    # código
}

Invocarla es muy fácil: simplemente se escribe el nombre SIN los paréntesis:

mi_funcion

Recuerda que si quieres invocar la función desde consola, primero tienes que especificarlo con el comando source o el comando del punto (.) y el nombre del archivo donde está definida:

source mi_archivo.sh

Y luego propiamente el nombre de la función:

mi_funcion

Por supuesto, una función puede aceptar parámetros. Sólo que éstos no se escriben en la definición, sino cuando es invocada desde la terminal o bien dentro del mismo código:

mi_funcion() {
    echo "Mi nombre es $1 y tengo $2 años."
}

mi_funcion Fulano 34        # Mi nombre es Fulano y tengo 34 años.

Manejo de errores

Las funciones también pueden devolver un valor con la palabra clave return y con $? se accede a ese valor. Si el retorno es 0, indica que la ejecución fue exitosa; si es otro número, ha ocurrido algún error.

mi_funcion() {
    # código
    return 15
}

mi_funcion
echo $?       # 15 - Ocurrió un error

Podemos manejar los errores con un condicional if, evaluando si el retorno es distinto de cero. Por ejemplo:

cp lista.txt /home/

if [[ $? -ne 0 ]]; then
    echo "Ha ocurrido un error"
fi

Variables globales y locales

Existen dos tipos de variables: globales y locales. Las variables globales son accesibles desde cualquier parte del código; en cambio las locales sólo son accesibles dentro de la misma función y se especifican con la palabra local.

saludo="Hola, mundo, soy "    # Variable global

mi_funcion() {
    local nombre="Pablo"      # Variable local
    echo $saludo $nombre
}

echo $saludo    # Hola, mundo, soy
echo $nombre    # ERROR - No se puede acceder a la variable local $nombre

Ejercicios

  1. Escribir una función que admita dos parámetros, nombre y apellido, y que imprima el mensaje "¡Bienvenido, [nombre] [apellido]! Has ejecutado el archivo [nombre_del_archivo] cuyo PID es [PID]". (Pista: revisar el capítulo 6).
  2. Escribir una función que admita como parámetro un número entero y que retorne por consola 0 si es mayor que 100 o el mismo número si es menor.
  3. Escribir una función que admita como parámetros dos números enteros, que los multiplique y que guarde el resultado en una variable local llamada producto. Mostrar el resultado en la terminal.