Parámetros posicionales

En un programa de shell definen unas variables especiales, identificadas por números, que toman los valores de los argumentos que se indican en la línea de órdenes al ejecutarlo. Tras el nombre de un script se pueden añadir valores, cadenas de texto o números separados por espacios, es decir, parámetros posicionales del programa de shell, a los que se puede acceder utilizando estas variables.

La variable $0 contiene el parámetro 0 que es el nombre del programa de shell.

Las variables $1, $2, $3, $4, ... hacen referencia a los argumentos primero, segundo, tercero, cuarto, ... que se le hayan pasado al programa en el momento de la llamada de ejecución.

Por ejemplo, si tenemos un programa de shell llamado parametros con el siguiente contenido:

echo $0 
echo $1 
echo $2
echo $3 
al ejecutarlo
$ parametros primero segundo tercero
prametros
primero
segundo
tercero
            

Modificación de los parámetros posicionales

Durante la ejecución de un programa de shell podría interesarnos modificar el valor de los parámetros posicionales. Esto no lo podemos hacer directamente, las variables 1, 2, ... no están definidas como tales. Para realizar estos cambios tenemos que utilizar la orden set. Esta orden asigna los valores de los parámetros posicionales a la shell activa de la misma forma que se hace en la línea de órdenes al ejecutara un programa; hay que tener en cuenta que no los asigna individualmente, sino en conjunto.

Por ejemplo

$ set primero segundo tercero
$ echo $1 
primero
$ echo $2 
segundo
$ echo $3
tercero
              

La sentencia shift

La sentencia shift efectúa un desplazamiento de los parámetros posicionales hacia la izquierda un número especificado de posiciones. La sintaxis para la sentencia shift es:

$ shift n
              

donde n es el número de posiciones a desplazar. El valor predeterminado para n es 1. Hay que observar que al desplazar los parámetros hacia la izquierda de pierden los primeros valores, tantos como hayamos desplazado, al superponerse los que tiene a la derecha.

Por ejemplo:

$ set uno dos tres cuatro
$ echo $1
uno
$ shift
$ echo $1
dos
$ shift
$ echo $1
tres
$ shift
$ echo $1
cuatro
              

Operador {}

Hemos visto la forma de acceder a los diez primeros parámetros posicionales, pero para acceder a parámetros de más de dos dígitos tendremos que usar una pareja { } para englobar el número.

$ echo ${10}
$echo ${12}
              

El operador { } también se usa para delimitar el nombre de las variables si se quiere utilizarla incluida dentro de un texto sin separaciones:

$DIR=principal
$ DIRUNO=directorio
$ UNO=subdirectorio
$ echo $DIRUNO
directorio
$ echo ${DIR}UNO
principalUNO