Unix / Linux - Variables especiales
En este capítulo, discutiremos en detalle acerca de las variables especiales en Unix. En uno de nuestros capítulos anteriores, entendimos cómo tener cuidado cuando usamos ciertos caracteres no alfanuméricos en los nombres de las variables. Esto se debe a que esos caracteres se utilizan en los nombres de variables especiales de Unix. Estas variables están reservadas para funciones específicas.
Por ejemplo, el $ carácter representa el número de identificación del proceso, o PID, del shell actual -
$echo $$
El comando anterior escribe el PID del shell actual:
29949
La siguiente tabla muestra una serie de variables especiales que puede utilizar en sus scripts de shell:
No Señor. | Variable y descripción |
---|---|
1 | $0 El nombre de archivo del script actual. |
2 | $n Estas variables corresponden a los argumentos con los que se invocó un script. aquín es un número decimal positivo que corresponde a la posición de un argumento (el primer argumento es $ 1, el segundo argumento es $ 2, y así sucesivamente). |
3 | $# El número de argumentos proporcionados a un script. |
4 | $* Todos los argumentos se citan dos veces. Si un script recibe dos argumentos, $ * equivale a $ 1 $ 2. |
5 | $@ Todos los argumentos se citan individualmente por partida doble. Si un script recibe dos argumentos, $ @ equivale a $ 1 $ 2. |
6 | $? El estado de salida del último comando ejecutado. |
7 | $$ El número de proceso del shell actual. Para scripts de shell, este es el ID de proceso bajo el cual se están ejecutando. |
8 | $! El número de proceso del último comando en segundo plano. |
Argumentos de la línea de comandos
Los argumentos de la línea de comandos $ 1, $ 2, $ 3, ... $ 9 son parámetros posicionales, con $ 0 apuntando al comando, programa, script de shell o función real y $ 1, $ 2, $ 3, ... $ 9 como argumentos a la mando.
El siguiente script utiliza varias variables especiales relacionadas con la línea de comando:
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
Aquí hay una ejecución de muestra para el script anterior:
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
Parámetros especiales $ * y $ @
Hay parámetros especiales que permiten acceder a todos los argumentos de la línea de comandos a la vez. $* y $@ ambos actuarán de la misma manera a menos que estén entre comillas dobles, "".
Ambos parámetros especifican los argumentos de la línea de comandos. Sin embargo, el parámetro especial "$ *" toma la lista completa como un argumento con espacios entre y el parámetro especial "$ @" toma la lista completa y la separa en argumentos separados.
Podemos escribir el script de shell como se muestra a continuación para procesar un número desconocido de argumentos de línea de comando con los parámetros especiales $ * o $ @ -
#!/bin/sh
for TOKEN in $*
do
echo $TOKEN
done
Aquí hay una ejecución de muestra para el script anterior:
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note - aquí do...done es una especie de bucle que se tratará en un tutorial posterior.
Estado de salida
los $? variable representa el estado de salida del comando anterior.
El estado de salida es un valor numérico que devuelve cada comando una vez completado. Como regla general, la mayoría de los comandos devuelven un estado de salida de 0 si tuvieron éxito y 1 si no tuvieron éxito.
Algunos comandos devuelven estados de salida adicionales por motivos particulares. Por ejemplo, algunos comandos diferencian entre tipos de errores y devolverán varios valores de salida según el tipo específico de falla.
A continuación se muestra el ejemplo de un comando exitoso:
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$