| Programación en shell: Administración de linux: Una guía básica | ||
|---|---|---|
| Anterior | Programas de shell | Siguiente |
Además de las variables de shell propias del entorno, las definidas por el usuario y los parámetros posicionales en un shell existen otra serie de variables cuyo nombre está formado por un carácter especial, precedido por el habitual símbolo $.
* La variable $* contiene una cadena de caracteres con todos los parámetros posicionales de la shell activa excepto el nombre del programa de shell. Cuando se utiliza entre comillas dobles se expande a una sola cadena y cada uno de los componentes está separado de los otros por el valor del carácter separador del sistema indicado en la variable IFS. Es decir si IFS tiene un valor "s" entonces "$*" es equivalente a "$1s$2s...". Si IFS no está definida, los parámetros se separan por espacios en blanco. Si IFS está definida pero tiene un contenido nulo los parámetros se unen sin separación.
@ La variable $@ contiene una cadena de caracteres con todos los parámetros posicionales de la shell activa excepto el nombre del programa de shell. La diferencia con $* se produce cuando se expande entre comillas dobles; $@ entre comillas dobles se expande en tantas cadenas de caracteres como parámetros posicionales haya. Es decir "$@" equivale a "$1" "$2" ...
# Contiene el número de parámetros posicionales excluido el nombre del probrama de shell. Se suele utilizar en un guion de shell para verificar que el número de argumentos es el correcto.
? Contiene el estado de ejecución de la última orden, 1 para una terminación con error o 0 para una terminación correcta. Se utiliza de forma interna por los operadores || y && que vimos con anterioridad, se utilizar por la orden test que vermos más adelante y también la podremos usar explícitamente.
$ contiene el PID de la shell. En un subshell obtenida por una ejecución con (), se expande al PID de la shell actual, no al de la subshell. Se puede utilizar para crear ficheros con nombre único, por ejemplo $$.tmp, para datos temporales.
! Contiene el PID de la orden más recientemente ejecutada en segundo plano. Esta variable no puede ayudar a controlar desde un guion de shell los diferentes procesos que hayamos lanzado en segundo plano.
Ejemplos
Vemos algunos ejemplos a continuación:
$ set a b c d e
$ echo $#
5
$ echo $*
a b c d e
$ set "a b" c d
$ echo $#
3
$ echo $*
a b c d
|
Otro ejemplo, si tenemos el script llamado ejvar1 con el siguiente contenido
ps
echo " el PID es $$"
|
al ejecutarlo
$ ./ejvar1
PID TTY TIME CMD
930 pts/3 00:00:00 bash
1011 pts/3 00:00:00 bash
1012 pts/3 00:00:00 ps
el PID es 1011
|
y vemos como muestra el PID de la shell que ejecuta el script.
Como el PID del prodceso es único en el sistema, este valor puede utilizarse para construir nombres de ficheros temporales únicos para un proceso. Estos ficheros normalmente se suelen situar en el directorio temporal /tmp.
Por ejemplo:
miproctemp=/tmp/miproc.$$
. . . .
rm -f $miproctemp
|