Pasar parámetros Bash script desde la Shell: posicionales...

Pasar parámetros Bash script desde la Shell: posicionales...

Es posible pasar a un Bash 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


echo "Nombre del script: $0"

echo "Cantidad de parámetros pasados: $#"


# Presentar todos los parámetros como una única cadena

echo "Lista de parámetros (único argumento): $*"


# Presentar parámetros individualmente

echo "Lista de parámetros (un parámetro por argumento):"

for param in "$@"; do

  echo -e "\tParámetro: $param"

done


echo "PID del shell actual: $$"


# Ejecutar comando en segundo plano

sleep 100 &

echo "PID del último comando en segundo plano: $!"


echo "Código de retorno del último comando: $?"


# Generar error intencionado y mostrar el código de retorno

echo "Generación de un error intencionado..."

echo "ls /etc/password 2>/dev/null"

ls /etc/password 2>/dev/null


echo "Código de retorno del último comando: $?"

exit

Escribimos en consola:

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

Lo que da como resultado:

Nombre del script: ./muestra_param_2.sh

Cantidad de parámetros pasados: 6

Lista de parámetros (único argumento): 1 2 3 cuatro 5 seis

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

PID del shell actual: 6165

PID del último comando en segundo plano: 6166

Código de retorno del último comando: 0

Generación de un error intencionado...

ls /etc/password 2>/dev/null

Código de retorno del último comando: 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