En esta entrada vamos a plantear una serie de scripts que nos sirvan para repasar las funciones, cómo invocarlas o llamarlas, como pasar y usar parámetros dentro de la función y cómo devolver y utilizar un código de retorno de una función.
Función
Vamos a utilizar una analogía para definir qué es una función en un shell script. Una función en un pequeño script que resuelve un problema concreto dentro de un script.
Desde la función podemos acceder a cualquier variable global definida en el script y llamar a otra función de nuestro script. Se trata de comandos que están dentro del script y que, por tanto, se ejecutan como parte del script.
Una función está compuesta por la declaración de la función y por el cuerpo de la función
Declaración de función
Para declarar una función utilizaremos la palabra reservada function seguida del nombre de la función y dos caracteres de apertura y cierre de paréntesis.
Con la declaración de la función se indica al bash el nombre o identificador de la función, que se utilizará para llamarla. Además se indica que, a continuación, viene el cuerpo de la función.
El cuerpo de la función
Se trata de un conjunto de comandos ordenados que se ejecutarán en secuencia (como un script) que está delimitado entre una llave de apertura y otra de cierre.
Entre las llaves, escribimos los comandos que queramos ejecutar.
Como se llama a una función
Para llamar o ejecutar a una función tan solo tenemos que escribir el nombre de la función en nuestro script cómo si ejecutáramos un comando.
Parámetros dentro de la función
A una función le podemos pasar parámetros. Para ello tan solo tenemos que escribirlos después de escribir el nombre de la función, exactamente igual que hacemos cuando le pasamos parámetros a un script.
Para acceder a los valores de los parámetros que le pasamos a una fución utilizamos las mismas variables $1…$9, $@ que utilizamos con los scripts. Y aquí tenemos un problema de colisión, dependerá del ámbito.
Como sabemos cuando estamos dentro de una función, nosotros que no que no cabemos, el flujo de ejecución, al ámbito de las variables es el de la función. Es decir, dentro de una función $1 contiene el valor que se haya pasado en el primer parámetro a la función.
Menos mal que nosotros siempre, pero siempre siempre, asignamos los parámetros que nos pasan a nuestros scripts a variables que nos sirven para, de alguna forma, nombrarlos.
Ejemplos
Ejemplo de parámetros
Tenemos este script

Qué pasará si lo modifico para que el recorrido de los parámetros se haga dentro de una función 🙂
Primera versión.. que falla

Para que se ejecute la función, tenemos que llamarla o invocarla dónde queramos que se ejecute cómo si fuera un comando más.

Esto fallará también, aunque se invoca a la función, no va a realizar el trabajo que nosotros esperamos.

La función recorrerá todos los parámetros que se le pasen a la función. El problema es el ámbito. Con el for se recorre $@ si no se pasa ninguna lista. $@ cuando el for estaba fuera de la función eran los parámetros del script, ahora son los parámetros de la función :_(

Vamos a probarlo 😉


Conclusiones
- Las funciones nos permiten reutilizar código. Escribimos una función con los comandos que realicen una tarea y podemos reutilizarla varias veces en nuestro script. Es decir, es como un script 🙂
- Las funciones pueden recibir parámetros y la forma de acceder a ellos es la misma que en el script. Por tanto se pueden producir colisiones y, sobre todo, errores humanos.
Dejar una respuesta