Los parámetros en Bash script: especiales, posicionales...

Los parámetros en Bash script: especiales, posicionales...

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 conforman dos categorías: los posicionales y los especiales.

¿Para qué sirven los parámetros posicionales?

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}... Hay que tener en cuenta que el shell Bourne está limitado a los parámetros del 0 al 9.

  • Ejemplo: 

A continuación, mostramos un pequeño script que muestra ciertos argumentos pasados como parámetros en función de su posición. Si algunos parámetros contienen caracteres especiales o espacios, entonces es necesario ponerlo entre comillas.

#!/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 (El símbolo $ lo utilizamos para indicar que estamos introduciendo lo que escribimos en consola):

$ ./muestra_param.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 

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

Otra opción es:

$ ./muestra_param.sh uno 2 tres 4 5 6 7 8 9 diez 11 12 13 14 quince 16 17

Dando como resultado:

El 1er parámetro es: uno El 3er parámetro es: tres El 10mo parámetro es: diez El 15 parámetro es: quince

¿Para qué sirven los parámetros especiales?

Estas también son variables reservadas que permiten (en algunos casos) efectuar operaciones sobre los mismos parámetros. A continuación, mostramos una lista de parámetros especiales:

  1. $0: Contiene el nombre del script tal como es invocado.
  2. $*: El conjunto de todos los parámetros en un solo argumento.
  3. $@: El conjunto de argumentos, un argumento por parámetro.
  4. $#: El número de parámetros pasados al script.
  5. $?: El código de retorno del último comando.
  6. $$: El PID del shell que ejecuta el script.
  7. $! : El PID del último proceso ejecutado en segundo plano.
  • Ejemplo: 

Un script que pone en práctica los 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

Escribimos en consola:

$ ./muestra_param_2.sh 1 2 3 cuatro 5 seis 

Lo que da como resultado:

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

¿Cómo inicializar los parámetros?

  • El comando “set”

Es posible pasar directamente parámetros al shell gracias a un comando tan simple como “set”. Inicializará automáticamente los parámetros posicionales "$1,$2,$3" con los valores "param1,param2,param3", borrando de este modo los antiguos valores si existieran. Los parámetros especiales "#,* et @" son automáticamente actualizados:

$ set param1 param2 param3
  • El comando “shift”

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), etc. Es posible indicar como argumento (shift n) el número de posiciones que hay que desplazar los parámetros.

  • Ejemplo 

A continuación veremos el empleo del comando interno “shift”: 

#!/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}" 

Y su resultado:

$ ./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:

Linux