Cómo detectar y manejar errores en sus scripts bash

Cómo detectar y manejar errores en sus scripts bash

Podemos usar el comando TRAP para captar el sistema de señal de error por el sistema durante la ejecución del script. Entonces puede ejecutar un comando shell o llamar a una función. De esta manera, puede ejecutar su código de script personalizado en un error que ocurrió en un script bash.

Esto puede ser útil para revertir cualquier cambio parcial, cerrar conexiones de bases de datos o estado de correo electrónico a las personas en cuestión, etc. Puedes usar comandos de trampa con 'ERRAR' Señales como:

trampa 'on_error_function' err 

Cuando se genera un error en un script de shell, ejecutará una función llamada 'on_error_function' de su script de shell. En lugar de llamar a una función, simplemente puede ejecutar un comando también.

Ejemplo: ejecute una función en error en bash

Entendamos con un ejemplo. Crear un script de shell de muestra y crear una función con cualquier nombre. Luego agregue el trampa comando con la función para ERRAR señal. A continuación, agregue un comando simple que genera un error.

#!/usr/bin/env Bash on_error () echo "Se produjo algún error" trap 'on_error' err ls ~/dir_not_exists
123456789#!/usr/bin/env Bash on_error () echo "Se produjo algún error" trap 'on_error' err ls ~/dir_not_exists

Ejecute el script anterior y debería ver los resultados a continuación:

Salida: ls: no se puede acceder a '/home/tecadmin/dir_not_exists': no ​​se produjo dicho archivo o directorio, se produjo algún error 

Puede ver que el error está atrapado y la función on_error () se ejecuta por el script bash.

Ejemplo: ejecute un comando en error en bash

Veamos un ejemplo más. Aquí ejecutaremos un comando cuando se produzca cualquier error en el script de shell.

#!/usr/bin/env Bash trampa 'echo ohhh no!'Err ls ~/dir_not_exists
12345#!/usr/bin/env Bash trampa 'echo ohhh no!'Err ls ~/dir_not_exists

En el script anterior, no definimos ninguna función separada. Simplemente ejecute un comando echo en error. Ejecutar el script anterior y ver los resultados.

Salida: ls: no puede acceder a '/home/tecadmin/dir_not_exists': no ​​hay dicho archivo o directorio ohhh no! 

Ejemplo: Obtener el número de errores de línea ocurrido

También puede averiguar el número de línea, donde el error ocurrió en el script bash junto con el nombre del script. Para hacer esto, use la 'persona que llama' incorporada a Bash.

#!/usr/bin/env Bash on_error () echo "Error encontrado en: $ (Caller)"> & 2 Trap 'on_error' err ls ~/dir_not_exists
123456789#!/usr/bin/env Bash on_error () echo "Error encontrado en: $ (Caller)"> & 2 Trap 'on_error' err ls ~/dir_not_exists

Ejecutar el script anterior y ver los resultados. Verá el nombre del script y el número de línea, donde ocurrió el error.

Salida: LS: No se puede acceder a '/home/tecadmin/dir_not_exists': no ​​se encuentra dicho archivo o error de directorio en: 9 ./guion.mierda 

Conclusión

Gracias por leer este artículo. Con suerte, este tutorial te ayuda con una mejor escritura de scripts de shell captando el error y tomando algo de acción.

Además, recuerde que la trampa ERR atrapa solo los errores de tiempo de ejecución. Como si algún comando devuelve el código de estado distinto de cero. No capta los errores de sintaxis, porque en el caso del error de sintaxis, el script falla sin ejecutar ningún comando.