Los parámetros posicionales en un Shell Script.


Como ya se ha mencionado en entradas anteriores, las variables del shell son espacios de memoria que poseen nombre y guardan información. Ciertas variables son conocidas como variables de ambiente. Se les conoce así ya que sus valores pueden ser conocidos por los subprocesos del shell.

Las variables internas más importante del sistema son los parámetros posicionales. Estas variables guardan los valores de los argumentos que se envían a los scripts cuando son invocados.

Los parámetros posicionales son nombrados numéricamente a partir de 1 hasta N, donde N es el último argumento enviado al script. También existe el parámetro posicional 0, cuyo valor es el nombre del script invocado( o en defecto, la manera en que se invocó). Por ejemplo, suponga que posee el siguiente script de nombre prueba_posicional y lo invoca de la siguiente manera:

#! /bin/bash

# Script para probar parametros posicionales.El script desplegara los primeros tres parametros enviados por el usuario junto con el nombre del script.

echo "Nombre del script: $0"
echo "Primer argumento: $1"
echo "Segundo argumento: ${2}"
echo "Tercer argumento: ${3}"

usuario@Linux:~$ . prueba_posicional Uno Dos Tres

De la misma forma, existen dos variables especiales las cuales contienen a todos los parámetros posicionales (excepto por el parámetro 0). Por ejemplo, suponga que posee el script prueba_posicional2 y lo ejecuta de la siguiente manera:

#! /bin/bash

# Script para probar las variables especiales. Las variables $* y $@ desplegaran
 la lista de parametros pasados al script.

echo "Nombre del script: $0"
echo Argumentos: $*
echo Argumentos: $@

usuario@Linux:~$ . prueba_posicional2 1 a 3 b 5 c 7 e 9 f

La diferencia entre estas dos variables es poco importante y puede distinguirse cuando estas variables se encuentran entre dobles comillas la variable de IFS(Una variable de entorno que contiene una lista de caracteres para separar campos) está fijada a algún carácter visible.

$* contiene a los parámetros posicionales, comenzando por el uno. Cuando la variable $* se encuentra entre comillas dobles, todos los parámetros son tratados como una sola unidad, esto ya que cada uno de los valores de los parámetros es separado por el primer carácter de la variable especial IFS. Si la variable IFS no está establecida, los parámetros se separan con espacios. Si IFS es nulo, los parámetros se unen sin utilizar ningún tipo de separador.

$@ contiene a los parámetros posicionales, empezando por el uno. Cuando la variable $@ se encuentra entre comillas dobles cada parámetro es tratado como una unidad separada del resto. Por ejemplo, suponga que posee el siguiente script de nombre prueba_posicional3 y lo ejecuta de la siguiente manera:

#! /bin/bash

# Script para probar las variables especiales.

# Prueba utilizando el valor por defecto de variable IFS sin comillas dobles.

echo "Prueba utilizando el valor por defecto de variable IFS sin comillas dobles."
echo "==================================================="
echo "Valor de variables IFS: $IFS"
echo "Nombre del script: $0"
echo Argumentos: $*
echo Argumentos: $@
echo

# Prueba utilizando el valor por defecto variable IFS con comillas dobles.

echo "Prueba utilizando el valor por defecto de variable IFS con comillas dobles."
echo "==================================================="
echo "Valor de variable IFS: $IFS"
echo "Nombre del script: $0"
echo "Argumentos: $*"
echo "Argumentos: $@"
echo

# Prueba utilizando variable IFS sin comillas dobles.

IFS=#

echo "Prueba utilizando variable IFS sin comillas dobles."
echo "==================================================="
echo "Nombre del script: $0"
echo "Valor de variable IFS: $IFS"
echo Argumentos: $*
echo Argumentos: $@
echo

# Prueba utilizando variable IFS con comillas dobles.

IFS=$

echo "Prueba utilizando variable IFS con comillas dobles."
echo "==================================================="
echo "Nombre del script: $0"
echo "Valor de variable IFS: $IFS"
echo "Argumentos: $*"
echo "Argumentos: $@"

usuario@Linux:~$ . prueba_posicional3 1 2 3 4 a b c d

La variable especial # guarda el número de parámetros posicionales enviados al script. Ejemplo, suponga que posee el siguiente script de nombre prueba_posicional4 y lo ejecuta de la siguiente manera:

#! /bin/bash

# Script para probar parametros posicionales

echo "Nombre del script: $0"
echo "Numero de argumentos: $#"
usuario@Linux:~$ . prueba_posicional4 1 2 3 4

 

EJERCICIOS

  1. Cree un Shell Script el cual reciba 5 parámetros y los despliegue en pantalla.
  2. Cree un Shell Script el cual reciba(incluyendo las comillas) los siguientes parámetros:  “Primer Parametro” “Segundo Parametro” “Tercer Parametro”. ¿Qué valor muestra la variable #? ¿Qué se puede inducir de este ejercicio?
  3. Cree un Shell Script el cual reciba(incluyendo las comillas) los siguientes parámetros:  “Scooby Doo” ‘Shaggy’ Vilma Fred . ¿Qué valor muestra la variable #? ¿Qué se puede inducir de este ejercicio?
  4. Cree un Shell Script que despliegue el nombre del mismo.
  5. ¿Qué pasaría si un Shell script recibe 9 parámetros y se intenta imprimir el parámetro 10?
  6. Cree un Shell Script el cual despliegue en pantalla todos los valores de los parámetros enviados utilizando las dos variables especiales mencionadas.
  7. Cree un Shell Script el cual despliegue en pantalla todos los valores de los parámetros enviados,  separados por un guión.
  8. Cree un  Shell Script el cual cree un directorio a partir del primer parámetro recibido.
  9. Cree un  Shell Script el cual despliegue el contenido de un archivo a partir del segundo parámetro recibido.
  10. Realice diferentes pruebas con el script número 3 utilizando diferentes valores para la variable de entorno IFS. ¿ Cómo se comportan las variables $@ y $*?
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s