2.4.- Last Argument Operator (!$)
3.- Obtener resultados de una función
3.2- Usar command substitution
3.3- Pasar argumentos por referencia
name () compound-command [redirections]
function name [()] compound-command [redirections]
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.
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.
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
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
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.
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"
function simple_outputs() {
sum=$(($1+$2))
echo $sum
suma=$(simple_outputs 1 2)
echo "Sum is $suma"
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"
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
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.
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.