Bash - Funciones


Índice:

      1.- Definición

      2.- Argumentos

         2.1.- Lista de argumentos

         2.2.- Flags

         2.3.- Environment Variables

         2.4.- Last Argument Operator (!$)

         2.5.- Pipe Operator (|)

      3.- Obtener resultados de una función

         3.1- Usar variables globales

         3.2- Usar command substitution

         3.3- Pasar argumentos por referencia

      4.- Salida de una función

         4.1.- Return

         4.1.- Exit

      5.- Información adicional




1.- Definición  ⮴  

  name () compound-command [redirections] 

  function name [()] compound-command [redirections]  


2.- Argumentos  ⮴  

2.1.- Lista de argumentos  ⮴  

Se pueden pasar argumentos a un script bash durante su ejecución, en

forma de lista, separados por espacios a continuación del nombre del

script.


2.1.1.- Using Single Quote

Si la lista de entrada tiene argumentos que incluyen varias palabras se-

paradas por espacios, deben ir entre comillas simples.


          sh start.sh 'development mode' 100


2.1.2.- Using Double Quotes

Los argumentos que requieren evaluación deben ir entre comillas dobles

antes de pasarlos como entrada.


Consideremos un script bash copyFile.sh que recibe dos argumentos: Un

nombre de archivo y el directorio donde copiarlo:


          sh copyFile.sh abc.txt "$HOME"


2.1.3.-  Escaping Special Characters

Si los argumentos que hay que pasar tienen caracteres especiales, hay que

escaparlos con barras invertidas


          sh printStrings.sh abc a@1 cd\$ 1\*2


Los caracteres $ y * no pertenecen al conjunto seguro y, por lo tanto, se

escapan con barras invertidas.


Estas reglas para el uso de comillas simples, comillas dobles y caracte-

res de escape siguen siendo las mismas para las secciones siguientes.


2.2.- Flags  ⮴  

También se pueden pasar argumentos al script bash con la ayuda de flags. Es-

tas banderas suelen ser letras de un solo carácter precedidas de un guión.

El valor de entrada correspondiente a la bandera se especifica junto a ella

separa do por un espacio.


Consideremos el siguiente ejemplo de un script de registro de usuario,

userReg.sh que toma 3 argumentos: nombre de usuario, nombre completo y edad:


      sh userReg.sh -u abc -f Abc -a 25


Aquí, la entrada al script se especifica usando las banderas (u, f y a) y el

script procesa esta entrada obteniendo los valores correspondientes basados

en la bandera.


2.3.- Environment Variables  ⮴  

Los scripts Bash también se pueden pasar con los argumentos en forma de va-

riables de entorno. Esto se puede hacer de cualquiera de las siguientes ma-

neras:


Especificando el valor de la variable antes del comando de ejecución del

script.


Exportando la variable y luego ejecutando el script


Veamos el siguiente ejemplo de un script processor.sh, que toma dos varia-

bles var1 y var2 como entrada.


Como se mencionó anteriormente estas variables pueden ser alimentadas como

entrada al script:


      var1=abc var2=c\#1 sh processor.sh


Aquí, primero estamos especificando los valores de las variables var1 y var2

antes de invocar la ejecución del script, en el mismo comando.


También se puede conseguir lo mismo exportando var1 y var2 como una variable

de entorno y luego invocando la ejecución del script:


      export var1=abc

      export var2=c\#1

      sh processor.sh


2.4.- Last Argument Operator (!$)  ⮴  

El último argumento del comando anterior, referido por !$ también puede pa-

sarse como argumento a un script bash.


Supongamos que de nuevo estamos copiando archivos, y el destino es el direc-

torio home del usuario. Usando el operador de último argumento, podemos pa-

sar la entrada al script:


      cd $HOME

      sh copiarArchivo.sh abc.txt !$


En el primer comando, navegamos al home del usuario y cuando se invoca el

segundo comando, !$ se evalúa al último argumento del comando anterior que

es $HOME y por lo tanto el comando resultante se evalúa a:


      sh copyFile.sh abc.txt $HOME


2.5.- Pipe Operator (|)  ⮴  

El operador de tubería (|) en combinación con el comando xargs se puede uti-

lizar para alimentar la entrada a los scripts bash.


Volvamos al ejemplo anterior del script printStrings.sh que toma la entrada

como una lista de cadenas y las imprime.


En lugar de pasar estas cadenas como argumentos en la línea de comandos, se

pueden añadir dentro de un archivo. Entonces, este archivo, con la ayuda del

operador pipe y el comando xargs, puede ser usado como entrada:


      cat abc.txt | xargs printStrings.sh


Aquí, el comando cat muestra las cadenas que se han añadido en el archivo.

Estas se pasan al comando xargs a través del operador pipe, que recoge esta

lista y la pasa al script.


3.- Obtener resultados de una función  ⮴  

3.1- Usar variables globales  ⮴  

    sum=0

    rest=0


    function simple_outputs() {

      sum=$(($1+$2))

      rest=$(($1-$2))



    simple_outputs 1 2

    echo "La suma es  : $suma"

    echo "La resta es : $resta"


3.2- Usar command substitution  ⮴  

    function simple_outputs() {

      sum=$(($1+$2)) 

      echo $sum



    suma=$(simple_outputs 1 2)

    echo "Sum is $suma"


3.3- Pasar argumentos por referencia  ⮴  

A partir de Bash 4.3, podemos pasar un argumento de entrada por referencia y

luego modificar su estado dentro de la función.


      function ref_outputs() {

        declare -n sum_ref=$3

        declare -n res_ref=$4

        sum_ref=$(($1+$2))



      ref_outputs 1 2 suma resta

      echo "La suma es  : $suma"

      echo "La resta es : $resta"


4.- Salida de una función  ⮴  

Hay dos opciones, finalizan la ejecución de la función:


.- Return

.- Exit


Los valores que pueden devolver son números enteros entre 0 y 255


4.1.- Return  ⮴  

Return detiene la ejecución de una función Bash.


Si proporcionamos un argumento entero a return, devuelve ese argumento al

invocador de la función como estado de salida. En caso contrario, devuelve

el estado de salida del último comando ejecutado antes de return al invoca-

dor de la función.


4.1.- Exit  ⮴  

Usamos exit para salir de un script Bash.


No importa en qué parte del script lo llamemos. Por ejemplo, podemos llamar

a exit dentro de una función Bash o fuera de ella.


Similar a return, puede tomar un argumento entero. En ese caso, el script

sale con el estado de salida establecido en el argumento entero. Si no pasa-

mos un argumento a exit, sale con el estado de salida establecido al estado

de salida del último comando ejecutado antes de exit.



5.- Información adicional  ⮴  

Shell functions

Bash Functions in Linux

Differences Between the return and exit Commands

Otros enlaces