GNU/Linux >> Tutoriales Linux >  >> Linux

Comando de salida de Bash y códigos de salida

A menudo, al escribir secuencias de comandos de Bash, deberá finalizar la secuencia de comandos cuando se cumpla una determinada condición o tomar medidas en función del código de salida de un comando.

En este artículo, cubriremos el exit de Bash comando integrado y los estados de salida de los comandos ejecutados.

Estado de salida #

Cada comando de shell devuelve un código de salida cuando finaliza, ya sea con éxito o sin éxito.

Por convención, un código de salida de cero indica que el comando se completó correctamente y un código distinto de cero significa que se encontró un error.

La variable especial $? devuelve el estado de salida del último comando ejecutado:

date &> /dev/nullecho $?

La date el comando se completó con éxito y el código de salida es cero:

0

Si intenta ejecutar ls en un directorio inexistente, el código de salida será distinto de cero:

ls /nonexisting_dir &> /dev/nullecho $?
2

El código de estado se puede utilizar para averiguar por qué falló el comando. La página del manual de cada comando incluye información sobre los códigos de salida.

Al ejecutar 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.outecho $?

En el ejemplo anterior echo $? imprimirá el código de salida del tee comando.

Bash exit comando #

La exit el comando sale del shell con un estado de N . Tiene la siguiente sintaxis:

exit N

Si N no se proporciona, el código de estado de salida es el del último comando ejecutado.

Cuando se usa en scripts de shell, el valor proporcionado como argumento para exit el comando se devuelve al shell como un código de salida.

Ejemplos #

El estado de salida de los comandos se puede usar en comandos condicionales como if . En el siguiente ejemplo grep saldrá con cero (lo que significa verdadero en scripts de shell) si la "cadena de búsqueda" se encuentra en 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 || (O), el estado de salida del comando determina si se ejecutará el siguiente comando de la lista. Aquí, el mkdir el comando se ejecutará solo si cd devuelve cero:

cd /opt/code && mkdir project

Si un script termina con exit sin especificar un parámetro, el código de salida del script es el del último comando ejecutado en el script.

~/script.sh
#!/bin/bash

echo "doing stuff..."

exit

Usando solo exit es lo mismo que exit $? u omitiendo el exit .

Aquí hay un ejemplo que muestra cómo finalizar el script si lo invoca un usuario no root:

#!/bin/bash

if [[ "$(whoami)" != root ]]; then
  echo "Only user root can run this script."
  exit 1
fi

echo "doing stuff..."

exit 0

Si ejecuta el script como root, el código de salida será cero. De lo contrario, el script saldrá con el estado 1 .

Conclusión #

Cada comando de shell devuelve un código de salida cuando termina. La exit El comando se usa para salir de un shell con un estado dado.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.


Linux
  1. La diferencia entre los operadores Bash [[ Vs [ Vs ( Vs ((?)

  2. ¿Diferencia entre 'y' en la línea de comando (bash)?

  3. comando de exportación bash

  4. Código de salida de asignación de variables a sustitución de comandos en Bash

  5. ¿Qué hace la -e en un bash shebang?

Comando de lectura Bash

bash heredoc

Comando de fuente Bash

Comando de historial en Linux (Bash History)

Comando Bash printf

Script Bash (II)