Es posible pasar a un script los argumentos que necesita para su ejecución a partir de la línea de comandos. Estos argumentos son llamados parámetros y contienen dos categorías: los parámetros posicionales y los parámetros especiales.
Estos son los argumentos pasados al script cuando este es invocado. Son almacenados en las variables reservadas 1,2,3,...9,10,11,... y pueden ser llamados con las expresiones $1,$2...${10},${11}..
Nota: El shell Bourne está limitado a los parámetros del 0 al 9.
A continuación, un pequeño script que muestra ciertos argumentos pasados como parámetros en función de su posición:
#!/bin/bash
# muestra_param.sh
echo "El 1er parámetro es: $1"
echo "El 3er parámetro es: $3"
echo "El 10mo parámetro es: ${10}"
echo "El 15 parámetro es: ${15}"
Tan solo hay que llamar al script desde el terminal y enviarle un cierto número de parámetros:
$ ./muestra_param.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Nota: El símbolo $ lo utilizamos para indicar que estamos introduciendo lo que escribimos en consola.
Y devuelve:
El 1er parámetro es: 1 El 3er parámetro es: 3 El 10mo parámetro es: 10 El 15 parámetro es: 15
$ ./muestra_param.sh uno 2 tres 4 5 6 7 8 9 diez 11 12 13 14 quince 16 17
El 1er parámetro es: uno El 3er parámetro es: tres El 10mo parámetro es: diez El 15 parámetro es: quince
Nota: Si algunos parámetros contienen caracteres especiales o espacios, entonces es necesario ponerlo entre comillas.
Estas también son variables reservadas que permiten (en algunos casos) efectuar operaciones sobre los mismos parámetros.
A continuación una lista de parámetros especiales:
#!/bin/bash
# muestra_param_2.sh
# Mostrar el nombre del script:
echo "El nombre de mi script es: $0"
# Mostrar el número de parametros:
echo "Has pasado $# paramètros"
# Lista de parámetros (un solo argumento):
for param in "$*" do echo "Aquí la lista de parámetros (un solo argumento) : $param" done
# Lista de parámetros (un parámetro por argumento)
echo "Aquí la lista de parámetros (un parámetro por argumento) :" for param in "$@" do echo -e "\tParámetro : $param" done
# Mostrar el proceso:
echo "El PID del shell que ejecuta el script es: $$" # Ejecución de un comando en segundo plano sleep 100 & # Mostrar el proceso ejecutado en segundo plano echo "El PID del ultimo comando ejecutado en segundo plano es: $!"
# Mostrar el código de retorno del último comando "echo":
echo "El código de retorno del comando anterior es: $?"
# Generación de un error echo "Generación de un error..."
# Mostrar el comando errado:
echo "ls /etc/password 2>/dev/null" ls /etc/password 2>/dev/null
# Mostrar el código de retorno del último comando:
echo "El código de retorno del comando precedente es: $?" exit
$ ./muestra_param_2.sh 1 2 3 cuatro 5 seis
El nombre de mi script es: ./muestra_param_2.sh Has pasado 6 parámetros Esta es la lista de parámetros (un solo argumento): 1 2 3 cuatro 5 seis Esta es la lista de parámetros (un parámetro por argumento) : Parámetro: 1 Parámetro: 2 Parámetro: 3 Parámetro: cuatro Parámetro: 5 Parámetro: seis El PID del shell que ejecuta el script es: 6165 El PID del último comando ejecutado en segundo plano es: 6166 El código de retorno del comando precedente es: 0 Generación de error... ls /etc/password 2>/dev/null El código de retorno del comando precedente es: 1
Es posible pasar directamente parámetros al shell gracias a un comando tan simple como “set”:
$ set param1 param2 param3
El comando interno “shift” permite desplazar los parámetros.
El valor del 1er parámetro ($1) es reemplazado por el valor del 2do parámetro ($2), el del 2do parámetro ($2) por el del 3er parámetro ($3), …
Es posible indicar como argumento (shift n) el número de posiciones que hay que desplazar los parámetros.
#!/bin/bash
# desplaza_param.sh echo
echo "Número de parámetros: $#"
echo "El 1er parámetro es: $1"
echo "El 3er parámetro es: $3"
echo "El 6to parámetro es: $6"
echo "El 10mo parámetro es: ${10}"
echo "============================================="
echo "Desplazar una posición con el comando \"shift\"" shift
echo "Número de parámetros: $#"
echo "El 1er parámetro es: $1"
echo "El 3er parámetro es: $3"
echo "El 6to parámetro es: $6"
echo "El 10mo parámetro es: ${10}"
echo "============================================="
echo "Desplazar cuatros posiciones con el comando \"shift 4\"" shift 4 echo "Número de parámetros: $#"
echo "El 1er parámetro es: $1"
echo "El 3er parámetro es: $3"
echo "El 6to parámetro es: $6"
echo "El 10mo parámetro es: ${10}"
$ ./desplaza_param.sh 1 2 3 4 5 6 7 8 9 10
Número de parámetros: 10
El 1er parámetro es: 1
El 3er parámetro es: 3
El 6to parámetro es: 6
El 10mo parámetro es: 10
=============================================
Desplazar una posición con el comando "shift"
Número de parámetros: 9
El 1er parámetro es: 2
El 3er parámetro es: 4
El 6to parámetro es: 7
El 10mo parámetro es:
=============================================
Desplazar cuatro posiciones con el comando "shift 4"
Número de parámetros: 5
El 1er parámetro es: 6
El 3er parámetro es: 8
El 6to parámetro es:
El 10mo parámetro es: