En esta guía, consulte cómo verificar el código de salida bash del último comando y algunos posibles usos de la misma.
Código de salida de Bash
Cada comando UNIX/Linux ejecutado por el script de shell o el usuario deja un estado de salida. Es un número entero que permanece sin cambios a menos que se ejecute el siguiente comando. Si el código de salida es 0, entonces el comando fue exitoso. Si el código de salida no es cero (1-255), entonces significa un error.
Hay muchos usos potenciales del código de salida de Bash. El más obvio es, por supuesto, verificar si el último comando se ejecuta correctamente, especialmente si el comando no genera ninguna salida.
En el caso de Bash, se puede acceder al código de salida del comando anterior utilizando la variable shell "$?".
Comprobando el código de salida de Bash
Iniciar una terminal y ejecutar cualquier comando.
$ Fecha
Verifique el valor de la variable shell "$?"Para el código de salida.
$ Echo $?
Como el comando "fecha" se ejecuta correctamente, el código de salida es 0. ¿Qué pasaría si hubiera un error??
Intentemos ejecutar un comando que no exista.
$ ABCD
Verifique el código de salida.
$ Echo $?
Es un valor distinto de cero, lo que indica que el comando anterior no se ejecutó correctamente.
Ahora, eche un vistazo al siguiente comando:
Muestra de $ Cat.txt | Grep "Moneda"
Al trabajar con un comando que tiene una o más tuberías, el código de salida será del último código ejecutado en la tubería. En este caso, es el comando GREP.
Como el comando GREP fue exitoso, será 0.
$ Echo $?
En este ejemplo, si el comando GREP falla, entonces el código de salida no será cero.
Muestra de $ Cat.txt | Grep "ABCD"
$ Echo $?
Incorporación del código de salida en los scripts
El código de salida también se puede usar para secuestrar. Una forma simple de usarlo es asignándolo a una variable de shell y trabajando con ella. Aquí hay un script de shell de muestra que usa el código de salida como condición para imprimir una salida específica.
ps!/bin/bash
$ Echo "Hello World"
$ status = $?
$ [$ status -eq 0] && echo "comando exitoso" || echo "comando sin éxito"
Cuando se ejecuta, el script generará la siguiente salida.
Ahora, veamos qué sucede cuando hay un comando inválido para ejecutar.
ps!/bin/bash
$ Command Random
$ status = $?
$ [$ status -eq 0] && echo "comando exitoso" || echo "comando sin éxito"
Cuando se ejecuta, la salida será diferente.
Explicación del valor del código de salida
Cuando el código de salida no es cero, el valor varía de 1 a 255. Ahora, ¿qué significa este valor??
Si bien el valor es limitado, la explicación de cada valor es exclusiva del programa/script. Por ejemplo, "LS" y "Grep" tienen diferentes explicaciones para el código de error 1 y 2.
$ hombre ls
$ hombre grep
Definición del estado de salida en el script
Al escribir un script, podemos definir valores de código de salida personalizados. Es un método útil para la depuración más fácil. En los scripts bash, es el comando "salida" seguido del valor del código de salida.
$ Salida
Según la convención, se recomienda asignar el código de salida 0 para una ejecución exitosa y usar el resto (1-255) para posibles errores. Al llegar al comando de salida, la ejecución del script de shell se terminará, así que tenga cuidado con su colocación.
Eche un vistazo al siguiente script de shell. Aquí, si se cumple la condición, el script terminará con el código de salida 0. Si no se cumple la condición, entonces el código de salida será 1.
ps!/bin/bash
$ if [["$ (whoami)" != raíz]]; entonces
$ echo "no usuarios de raíz."
$ Salida 1
$ Fi
$ Echo "Usuario raíz"
$ salida 0
Verifique el resultado de ejecutar este script sin privilegio sudo o usuario de "root".
ps ./muestra.mierda
$ Echo $?
Pensamientos finales
Esta guía demuestra qué son los códigos de salida y cómo puede usarlos. También demuestra cómo asignar códigos de salida apropiados en un script bash.
Interesado en Scripting Bash? Una de las formas más fáciles de comenzar es escribiendo sus propios guiones. Mira esta guía simple sobre cómo escribir un script bash simple.
Computación feliz!