Tanto en los scrips en Bash como en sus funciones, los parámetros nos ofrece la posibilidad de interactuar con ellos, pudiéndole enviar datos para que los procese o que el script actúe de una determinada manera según los parámetros enviados. Veamos cómo trabajar con ellos y cómo sacarles partido.
Los parámetros se almacenan automáticamente en orden con un dólar delante del número que ocupan la posición que ocupan, empezando por 1, no por 0. Es decir, el primer parámetro de la función / script será $1; el segundo, $2... y así sucesivamente.
$0 se reserva para el nombre del script.
Ojo, en una función $0 es el nombre del script, pero $1 es el primer parámetro de la función, no del script.
#!/bin/bash
function saludo()
{
echo "Soy una función que se llama $0 y saluda: Hola, "$1
}
textosaludo=$(saludo Pepe)
echo $textosaludo
Si no le pasamos parámetros, devuelve:
./funcionquesaluda.sh
Soy una función que se llama ./funcionquesaluda.sh y saluda: Hola, Pepe
Y si le pasamos parámetros, devuelve lo mismo:
./funcionquesaluda.sh Manolo
Soy una función que se llama ./funcionquesaluda.sh y saluda: Hola, Pepe
Si queremos conocer todos los parámetros, usaremos $* y para saber el número de parámetros, $#.
Así pues, el script:
#!/bin/bash
function saludo()
{
echo "Soy una función que se llama" $0 "y saluda: Hola, "$1
echo "He recibido "$# " parámetros, que son: "$*
}
textosaludo=$(saludo Pepe María Juan Marcos Manolo Marta)
echo $textosaludo
Devuelve:
./funcionquesaluda.sh Manolo
Soy una función que se llama ./funcionquesaluda.sh y saluda: Hola, Pepe He recibido 6 parámetros, que son: Pepe María Juan Marcos Manolo Marta
Y aquí vemos un nuevo concepto. Al escribir varios echo en una función, concatena las cadenas. Si quisiéramos que no lo hiciera, añadiríamos un retorno de carro:
#!/bin/bash
function saludo()
{
echo "Soy una función que se llama" $0 "y saluda: Hola, "$1
echo -e "\r"
echo "He recibido "$# " parámetros, que son: "$*
}
textosaludo=$(saludo Pepe María Juan Marcos Manolo Marta)
echo $textosaludo
Nos devolvería:
./funcionquesaluda.sh Manolo
He recibido 6 parámetros, que son: Pepe María Juan Marcos Manolo Marta
Una de las principales ventajas de los sistemas derivados de Unix es la posibilidad de automatizar tareas. Para realizar las tareas repetitivas están los scripts, pero dentro de los scripts, puede que haya también tareas repetitivas. Y para hacer esas tarear repetitivas dentro de los scripts están las funciones.
Para programar una función dentro de un script, deberemos declararla con funtion nombredelafuncion() y el código entre corchetes. Así:
#!/bin/bash
function funcionquesaluda()
{
echo "Hola, mundo, soy una función que saluda."
}
Esta función devolvería un texto. Pero para que se ejecute, deberemos invocarla como si fuera una instrucción más del script:
funcionquesaluda
Por lo que el script que define esta función y luego la invoca sería algo así:
#!/bin/bash
function funcionquesaluda
()
{
echo "Hola, mundo, soy una función que saluda.
"
}
echo "Soy un script que saluda: Hola, mundo"funcionquesaluda
Que nos devolverá esto:
Soy un script que saluda: Hola, mundo
Hola, mundo, soy una función que saluda.
Ahora que ya sabemos hacer funciones, aprenderemos a enviar parámetros a las funciones.