Consejos y trucos de detección y manejo de errores de bash

Consejos y trucos de detección y manejo de errores de bash

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.