Podemos definir las funciones en el shell, y si escribe scripts shell de cualquier tamaño, querrá usarlas para estructurar el código.
Para definir una función shell, sólo tiene que escribir su nombre seguido de un paréntesis vacío e introducir la sentencia entre corchetes:
Una función sencilla
Empezaremos con un a función realmente sencilla:
Al ejecutar el script obtendremos:
Cómo funciona
Este script empieza a ejecutar desde la parte superior. Todo igual que siempre. La diferencia es que cuando encuentra la construcción foo() {
, el script sabe que se está definiendo una función denominada foo
.
Se queda con la idea de que foo
se refiere a una función y se sigue ejecutando hasta que encuentra el corchete de cierre correspondiente }
. Cuando se ejecuta únicamente la línea foo
, la shell sabe que tiene que ejecutar la función definida anteriormente. Cuando se completa la función, la ejecución se reanuda en la línea posterior a la llamada a foo
.
Debe definir siempre una función antes de invocarla, es parecida a la definición de una función Pascal antes de la invocación pero no hay declaraciones posteriores en la shell. Esto no supone un problema, porque todos los scripts comienzan a ejecutarse desde la parte superior, de manera que si anteponemos todas las funciones a la primera llamada de la función, conseguiremos de que todas las funciones se definan antes de que puedan ser invocadas.
Cuando se solicita una función, los parámetros posicionales del script, $*
, $@
, $#
, $1
, $2
, etc., son reemplazados por los parámetros de la función. Así es como leemos nosotros los parámetros transmitidos a la función. Cuando la función acaba, se restablecen los valores anteriores.
Mediante el comando return puede hacer que las funciones envíen valores numéricos. Normalmente, para que las funciones retornen cadenas, la función debe almacenar la cadena en una variable, que podrá ser usada posteriormente, cuando finalice la función. También puede usar echo
con una cadena y tomar el resultado de esta manera:
Tenga en cuenta que puede declarar variables locales dentro de las funciones shell usando la palabra clave local. Después, la variable estará al alcance sólo dentro de la función. Sino, la función podrá acceder a las otras variables shell a las que se puede acceder globalmente. Si una variable local tiene le mismo nombre que una variable global, recu8brirá a dicha variable, pero únicamente dentro de la función. Por ejemplo, puede realizar los siguientes cambios en el script anterior para ver la puesta en práctica.
La salida sería:
A falta de un comando return que especifique un valor de retorno, una función envía el estado de salida del último comando ejecutado.
Envío de un valor
El siguiente script, mi_nombre
, muestra cómo se transmiten los parámetros de una función y cómo pueden enviar las funciones un resultado true
o false
. Use un parámetro del nombre que desea usar en la pregunta para llamar a este script.
- Tras la cabecera de la shell, defina la función
si_o_no
. - La parte principal del programa empieza así:
La salida normal de este script sería:
Cómo funciona
Cuando se ejecuta el script, se define la función si_o_no
pero no se ejecuta. En la sentencia if
, el script ejecuta la función si_o_no
, transmitiendo el resto de la línea a modo de parámetros a la función tras sustituir el $1
por el primer parámetro del script original, Atika
. La función usa estos parámetros, que se encuentran en los parámetros posicionales $1
, $2
, etc., y enviá un valor al solicitante. Dependiendo del valor enviado, la construcción if
ejecuta la sentencia adecuada.
Como ha visto, la shell dispone de un amplio conjunto de estructuras de control y de sentencias condicionales. Tendrá que aprender algunos de los comandos de la shell, y después ya estará listo para hacer frente a un problema de programación real sin un compilador a la vista.
Debe estar conectado para enviar un comentario.