Introducción
A menudo, al escribir scripts de Bash, es necesario finalizar el script cuando se cumple una determinada condición o realizar una acción en función del código de salida de un comando.
En este artículo, cubriremos exit
y los estados de salida de los comandos ejecutados.
Estado de salida
Cada comando de shell devuelve un código de salida cuando sale, ya sea exitoso o no exitoso.
Por convención, un código de salida de cero indica que el comando se completó correctamente y que un valor distinto de cero indica que se ha producido un error.
La variable especial $?
devuelve el estado de salida del último comando ejecutado:
date &> /dev/null
echo $?
El date
completó correctamente y el código de salida es cero:
0
Si intenta ejecutar ls
en un directorio que no existe, el código de salida no será cero:
ls /nonexisting_dir &> /dev/null
echo $?
2
El código de estado se puede utilizar para averiguar por qué falló el comando. La página de manual de cada comando incluye información sobre códigos de salida.
Cuando se ejecuta una canalización de varios comandos, el estado de salida de la canalización es el del último comando:
sudo tcpdump -n -l | tee file.out
echo $?
En el ejemplo anterior echo $?
imprime el código de tee
comando tee.
Salir del comando en Bash
El exit
sale del shell con un estado de N
Tiene la siguiente sintaxis:
exit N
Si N
, el código de estado de salida es el del último comando ejecutado.
Cuando se utiliza en scripts de shell, el valor proporcionado como argumento para el exit
se devuelve al shell como un código de salida.
Ejemplos de
El estado de salida de los comandos se puede utilizar en comandos condicionales como if
. En el siguiente ejemplo, grep
devolverá cero (lo que significa verdadero en los scripts de shell) si la "cadena de búsqueda" se encuentra en el filename
:
if grep -q "search-string" filename then
echo "String found."
else
echo "String not found."
fi
Al ejecutar una lista de comandos separados por &&
(Y) o