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.