En nuestro artículo de introducción a bash, aprendimos que un archivo de script de shell contiene una lista de comandos que ejecutará el intérprete de shell. En este artículo, repasemos los comandos de shell y su funcionamiento interno.
Un comando es una secuencia de palabras. La primera palabra indica el comando que se ejecutará y las palabras restantes se pasan como argumentos, donde los argumentos pueden ser las opciones o los parámetros del comando.
Algunos de los comandos comunes de Unix que se ejecutan en la línea de comandos son comandos de shell. Por ejemplo, comando ls, lpr y grep.
$ ls -alF $ lpr filename $ grep "string" filename
Estado de salida del comando Shell
El valor de retorno de un comando es su estado de salida, o 128 + N si el comando finaliza con la señal N. El estado de salida se utiliza para comprobar el resultado (éxito/fracaso) de la ejecución del comando. Si el estado de salida es cero, entonces el comando es exitoso. Si el comando falla, el estado de salida será distinto de cero.
Valor de salida | Estado de salida |
---|---|
0 (cero) | Éxito |
Distinto de cero | Fracaso |
2 | Uso incorrecto |
127 | Comando no encontrado |
126 | No es un ejecutable |
$? Variable de caparazón
El nombre de la variable de shell $? es una variable integrada especial que tiene el estado de salida del último comando ejecutado.
- Después de la ejecución de la función de shell, $? devuelve el estado de salida del último comando ejecutado en una función.
- Después de la ejecución del script de shell, $? devuelve el estado de salida del último comando ejecutado en el script.
Ejemplo de secuencia de comandos de Shell que explica el estado de salida del comando Shell
El siguiente script de shell exitstatus.sh muestra ejemplos de varios estados de salida de comandos de shell.
$ cat exitstatus.sh #! /bin/bash echo -e "Successful execution" echo -e "=====================" echo "hello world" # Exit status returns 0, because the above command is a success. echo "Exit status" $? echo -e "Incorrect usage" echo -e "=====================" ls --option # Incorrect usage, so exit status will be 2. echo "Exit status" $? echo -e "Command Not found" echo -e "=====================" bashscript # Exit status returns 127, because bashscript command not found echo "Exit status" $? echo -e "Command is not an executable" echo -e "=============================" ls -l execution.sh ./execution.sh # Exit status returns 126, because its not an executable. echo "Exit status" $?
Ahora, ejecute el exitstatus.sh anterior para ver los distintos estados de salida proporcionados por el script de shell de muestra.
$ bash exitstatus.sh Successful execution ===================== hello world Exit status 0 Incorrect usage ===================== ls: unrecognized option `--option' Try `ls --help' for more information. Exit status 2 Command Not found ===================== exitstaus.sh: line 15: bashscript: command not found Exit status 127 Command is not an executable ============================= -rw-r--r-- 1 root root 659 Mar 9 13:36 execution.sh exitstatus.sh: line 21: ./execution.sh: Permission denied Exit status 126
Nota:Comprobar el valor de retorno de una función o un comando es una de las principales responsabilidades de un programador. Esto debería convertirse en su segunda naturaleza al escribir cualquier código.