Consejos y trucos de detección y manejo de errores de bash
- 2628
- 507
- Alejandro Duran
Para detectar y manejar errores en un script bash, puede usar el 'set -e'
y 'trampa'
comandos, así como el 'si'
y 'caso'
declaraciones y el '||'
y '&&'
operadores.
Puede usar el comando set -e al comienzo de su script para habilitar este comportamiento, o puede usarlo antes de los comandos individuales para habilitarlo solo para esos comandos.
Es importante tener en cuenta que el 'set -e'
El comando solo afecta el estado de salida de los comandos individuales. No capta errores causados por errores de sintaxis u otros problemas en el script en sí. Para atrapar este tipo de errores, puede usar el 'set -o'
opción Errexit en su lugar.
Veamos algunos ejemplos:
- El
'set -e'
El comando le dice a BASH que salga inmediatamente si un comando devuelve un estado de salida no cero. Esto es útil para detectar y manejar errores en su script. Por ejemplo: #!/bin/bash set -e # Algunos comandos que pueden fallar comando1 comando2 # Esta línea solo se alcanzará si todos los comandos anteriores tienen éxito echo "Todos los comandos completados correctamente"12345678910 #!/bin/bash set -e # Algunos comandos que pueden fallar el comandante1command2 # Esta línea solo se alcanzará si todos los comandos anteriores sucedeCo "Todos los comandos completados con éxito" Si Command1 o Command2 devuelve un estado de salida distinto de cero, el script saldrá de inmediato y la línea eco "todos los comandos completados correctamente" no se ejecutarán.
- También puedes usar el
'||'
operador para ejecutar otro comando si el anterior falló. #!/bin/bash set -e # algunos comandos que pueden fallar el comando1 || echo "Command1 falló"; salida 1; comando2 || echo "comando2 fallido"; salida 1; # Esta línea solo se alcanzará si todos los comandos anteriores tienen éxito echo "Todos los comandos completados con éxito"12345678910 #!/bin/bash set -e # Algunos comandos que pueden fallar alcommand1 || echo "Command1 falló"; salida 1; comando2 || echo "comando2 fallido"; salida 1; # Esta línea solo se alcanzará si todos los comandos anteriores suceden a los "todos los comandos completados correctamente" En este ejemplo, el || El operador se usa para ejecutar el comando o el bloque de comandos que lo siguen si el comando anterior falla. El comando EXIT 1 se usa para salir del script con un estado de salida no cero, lo que indica un error.
- El
'trampa'
El comando le permite especificar un comando o una serie de comandos que se ejecutarán cuando se reciba una señal en particular. Puede usar esto para detectar errores y realizar tareas de limpieza, como eliminar archivos temporales o volver a hacer cambios en los cambios. Por ejemplo: #!/bin/bash set -e # Crear un archivo temporal temp_file = $ (mktemp) # Eliminar el archivo temporal en la trampa de salida 'rm -f $ temp_file' # algunos comandos que pueden fallar el comando1 || echo "Command1 falló"; salida 1; comando2 || echo "comando2 fallido"; salida 1; # Esta línea solo se alcanzará si todos los comandos anteriores tienen éxito echo "Todos los comandos completados con éxito"12345678910111213141516 #!/bin/bash set -e # Crear un filetemp_file temporal = $ (mktemp) # Eliminar el archivo temporal en exitTrap 'rm -f $ temp_file' salga # algunos comandos que pueden fallar el comandante || echo "Command1 falló"; salida 1; comando2 || echo "comando2 fallido"; salida 1; # Esta línea solo se alcanzará si todos los comandos anteriores suceden a los "todos los comandos completados correctamente" En este ejemplo, el comando trampa especifica que el
'rm -f $ temp_file'
El comando debe ejecutarse cuando el script reciba el 'SALIDA' señal. Esto asegura que el archivo temporal se elimine, incluso si el script sale debido a un error. - Puedes usar el
'si'
y'caso'
declaraciones para realizar diferentes acciones basadas en el estado de salida de un comando. Por ejemplo: #!/bin/bash set -e # algunos comandos que pueden fallar si el comando1; Entonces echo "Command1 Sucedió" el más eco "Comando1 fallido" EXIT 1 FI CASE "$ (Comando2)" en "éxito") echo "comando2 sucedido" ;; "falla") echo "comando2 falló"; salida 1 ;; ESAC # Esta línea solo se alcanzará si todos los comandos anteriores tienen éxito echo "Todos los comandos completados con éxito"12345678910111213141516171819 #!/bin/bash set -e # algunos comandos que pueden fallar el comando1; Entonces echo "Command1 Sucedió" el más eco "Command1 Falling" EXIT 1FI CASE "$ (Command2)" en "éxito") echo "comando2 sucedido" ;; "falla") echo "comando2 falló"; Salir 1 ;; esac # Esta línea solo se alcanzará si todos los comandos anteriores suceden a los que se realizan "Todos los comandos completados con éxito" En este ejemplo, la instrucción if se usa para verificar el estado de salida del comando1, y la instrucción de caso se usa para verificar la salida del comando2.
- También puedes usar el
'&&'
operador para ejecutar un comando o bloque de comandos solo si el comando anterior tiene éxito. Por ejemplo: #!/bin/bash set -e # Algunos comandos que pueden fallar comando1 && command2 && command3 # Esta línea solo se alcanzará si todos los comandos anteriores tienen éxito echo "Todos los comandos completados correctamente"123456789 #!/bin/bash set -e # Algunos comandos que pueden fallar el comando de comandos 2 && command3 # Esta línea solo se alcanzará si todos los comandos anteriores suceden a los "todos los comandos completados con éxito" En este ejemplo, el comando2 solo se ejecutará si el comando1 tiene éxito y el comando3 solo se ejecutará si el comando1 y el comando2 tienen éxito.
Envolver
Puede usar el comando trampa para atrapar otras señales también, como EN T (interrumpir) o TÉRMINO (Terminar). Para obtener más información, puede consultar la página de Bash Man o buscar tutoriales y ejemplos en línea.
espero que esto ayude! Hazme saber si tienes alguna pregunta.