GNU/Linux >> Tutoriales Linux >  >> Linux

Manejo de errores en scripts Bash

Las secuencias de comandos son una de las herramientas clave para que un administrador de sistemas administre un conjunto de actividades diarias, como ejecutar copias de seguridad, agregar usuarios/grupos, instalar/actualizar paquetes, etc. Al escribir una secuencia de comandos, el manejo de errores es uno de los aspectos cruciales. cosas que administrar.

Este artículo muestra algunas técnicas básicas/intermedias para manejar el manejo de errores en scripts de Bash. Analizo cómo obtener los códigos de error, obtener una salida detallada mientras se ejecuta el script, lidiar con la función de depuración y la redirección de errores estándar. Con estas técnicas, los administradores de sistemas pueden facilitar su trabajo diario.

[ A los lectores también les gustó: Desmitificación de los códigos de salida de la línea de comandos de Bash ]

Estado de salida

En secuencias de comandos Bash, $? imprime el estado de salida. Si devuelve cero, significa que no hay error. Si no es cero, puede concluir que la tarea anterior tiene algún problema.

Un ejemplo básico es el siguiente:

$ cat myscript.sh
           #!/bin/bash
           mkdir learning
           echo $?

Si ejecuta el script anterior una vez, imprimirá 0 porque el directorio no existe, entonces el script lo creará. Naturalmente, obtendrá un valor distinto de cero si ejecuta el script por segunda vez, como se ve a continuación:

$ sh myscript.sh
mkdir: cannot create directory 'learning': File exists
1

Mejores prácticas

Siempre se recomienda habilitar el modo de depuración agregando -e opción a su script de shell como se muestra a continuación:

$ cat test3.sh
!/bin/bash
set -x
echo "hello World"
mkdiir testing
 ./test3.sh
+ echo 'hello World'
hello World
+ mkdiir testing
./test3.sh: line 4: mkdiir: command not found

Puede escribir una función de depuración como se muestra a continuación, lo que ayuda a llamarla en cualquier momento, usando el ejemplo a continuación:

$ cat debug.sh
#!/bin/bash
_DEBUG="on"
function DEBUG()
{
 [ "$_DEBUG" == "on" ] && $@
}
DEBUG echo 'Testing Debudding'
DEBUG set -x
a=2
b=3
c=$(( $a + $b ))
DEBUG set +x
echo "$a + $b = $c"

Que imprime:

$ ./debug.sh
Testing Debudding
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5

Redireccionamiento de error estándar

Puede redirigir todos los errores del sistema a un archivo personalizado utilizando errores estándar, que se pueden indicar con el número 2 . Ejecútelo en los comandos Bash normales, como se muestra a continuación:

$ mkdir users 2> errors.txt
$ cat errors.txt
mkdir: cannot create directory ‘users’: File exists

La mayoría de las veces, es difícil encontrar el número de línea exacto en los scripts. Para imprimir el número de línea con el error, use el PS4 opción (compatible con Bash 4.1 o posterior). Ejemplo a continuación:

$ cat test3.sh
#!/bin/bash
PS4='LINENO:'

set -x
echo "hello World"
mkdiir testing

Puede ver fácilmente el número de línea mientras lee los errores:

$ /test3.sh
5: echo 'hello World'
hello World
6: mkdiir testing
./test3.sh: line 6: mkdiir: command not found

[ Obtenga este libro electrónico gratuito:Administrar sus clústeres de Kubernetes para principiantes. ]

Resumir

La gestión de errores es una habilidad clave para los administradores al escribir scripts. Estos consejos deberían ayudarlo a hacer su vida más fácil al solucionar problemas con los scripts de Bash o incluso con los comandos generales.


Linux
  1. Usando Bash para la automatización

  2. Typeset -a ¿Está dando un error en el script?

  3. ¿Usar la extensión .sh o .bash para scripts Bash?

  4. Error de secuencia de comandos Bash:¿Se esperaba una expresión entera?

  5. Bash:¿Error de sintaxis cerca del token inesperado '}'?

Bash Scripting:analizar argumentos en Bash Scripts usando getopts

Cómo crear documentos con scripts Bash

Cómo usar el comando echo en Bash Scripts en Linux

Solución de problemas del error "Bash:Comando no encontrado" en Linux

Usando el comando Dirname de Linux en Bash Scripts

Bash Beginner Series #3:Pasando Argumentos a Bash Scripts