Tipps und Tricks der Fehlererkennung und Handhabung der Fehlererfassung und Handhabung

Tipps und Tricks der Fehlererkennung und Handhabung der Fehlererfassung und Handhabung

Um Fehler in einem Bash -Skript zu erkennen und zu behandeln, können Sie die verwenden 'set -e' Und 'fangen' Befehle sowie die 'Wenn' Und 'Fall' Aussagen und die '||' Und '&&' Betreiber.

Sie können den Befehl set -e zu Beginn Ihres Skripts verwenden, um dieses Verhalten zu aktivieren, oder Sie können ihn vor einzelnen Befehlen verwenden, um es nur für diese Befehle zu aktivieren.

Es ist wichtig zu beachten, dass die 'set -e' Der Befehl wirkt sich nur auf den Exit -Status einzelner Befehle aus. Es fängt keine Fehler auf, die durch Syntaxfehler oder andere Probleme im Skript selbst verursacht werden. Um diese Art von Fehlern zu fangen, können Sie die verwenden 'set -o' ' ERREXIT -Option stattdessen.

Lassen Sie uns ein paar Beispiele sehen:

  1. Der 'set -e' Der Befehl fordert Bash an, sofort zu beenden, wenn ein Befehl einen Exit-Status ungleich Null zurückgibt. Dies ist nützlich, um Fehler in Ihrem Skript zu erkennen und zu behandeln. Zum Beispiel: #!/bin/bash set -e # Einige Befehle, die Befehlsfunktionen des Befehls 2 fehlschlagen können. Diese Zeile wird nur erreicht, wenn alle obigen Befehle erfolgreich sein können. "Alle Befehle erfolgreich ausgefüllt"
    12345678910#!/bin/bash set -e # Einige Befehle, die möglicherweise command1Command2 # Diese Zeile werden nur dann erreicht, wenn alle obigen Befehle im Folgenden "alle Befehle erfolgreich ausgeführt werden" erfolgreich sind

    Wenn Command1 oder Command2 einen Exit-Status ungleich Null zurückgibt, wird das Skript sofort beendet, und die Zeile spiegelt "alle Befehle erfolgreich ausgefüllt" nicht aus.

  2. Sie können auch die verwenden '||' Der Bediener führt einen weiteren Befehl aus, wenn der vorherige fehlgeschlagen ist. #!/bin/bash set -e # einige Befehle, die den Befehlsfehler 1 fehlschlagen können. || echo "command1 fehlgeschlagen"; Ausgang 1; command2 || echo "command2 fehlgeschlagen"; Ausgang 1; # Diese Zeile wird nur erreicht, wenn alle obigen Befehle erfolgreich sein können. "Alle Befehle erfolgreich abgeschlossen"
    12345678910#!/bin/bash set -e # einige Befehle, die möglicherweise nicht command1 || echo "command1 fehlgeschlagen"; Ausgang 1; command2 || echo "command2 fehlgeschlagen"; Ausgang 1; # Diese Zeile wird nur erreicht, wenn alle obigen Befehle nach Erfolg "alle Befehle erfolgreich abgeschlossen" werden

    In diesem Beispiel das || Der Bediener wird verwendet, um den Befehl oder den folgenden Befehlsblock auszuführen, wenn der vorhergehende Befehl fehlschlägt. Der Befehl exit 1 wird verwendet, um das Skript mit einem Exit-Status ungleich Null zu beenden, der einen Fehler angibt.

  3. Der 'fangen' Mit dem Befehl können Sie einen Befehl oder eine Reihe von Befehlen angeben, die ausgeführt werden sollen, wenn ein bestimmtes Signal empfangen wird. Sie können dies verwenden, um Fehler zu fangen und Reinigungsaufgaben auszuführen, z. B. das Löschen von temporären Dateien oder das Rückrollen von Änderungen. Zum Beispiel: #!/bin/bash set -e # Erstellen Sie eine temporäre Datei temp_file = $ (MKTEMP) # Löschen Sie die temporäre Datei in der Ausnahme -Trap 'RM -f $ temp_file' Beenden # einige Befehle, die den Befehl fehlschlagen können. echo "command1 fehlgeschlagen"; Ausgang 1; command2 || echo "command2 fehlgeschlagen"; Ausgang 1; # Diese Zeile wird nur erreicht, wenn alle obigen Befehle erfolgreich sein können. "Alle Befehle erfolgreich abgeschlossen"
    12345678910111213141516#!/bin/bash set -e # Erstellen Sie eine temporäre FileTemp_file = $ (MKTemp) # Löschen Sie die temporäre Datei in ExitTrap 'rm -f $ temp_file' exit # Einige Befehle, die möglicherweise nicht command1 || echo "command1 fehlgeschlagen"; Ausgang 1; command2 || echo "command2 fehlgeschlagen"; Ausgang 1; # Diese Zeile wird nur erreicht, wenn alle obigen Befehle nach Erfolg "alle Befehle erfolgreich abgeschlossen" werden

    In diesem Beispiel gibt der Befehl Trap an, dass die 'rm -f $ temp_file' ' Der Befehl sollte ausgeführt werden, wenn das Skript das empfängt 'AUSFAHRT' Signal. Dies stellt sicher, dass die temporäre Datei gelöscht wird, auch wenn das Skript aufgrund eines Fehlers ausgeht.

  4. Du kannst den ... benutzen 'Wenn' Und 'Fall' Aussagen zur Ausführung verschiedener Aktionen basierend auf dem Exit -Status eines Befehls. Zum Beispiel: #!/bin/bash set -e # einige Befehle, die möglicherweise fehlschlagen, wenn command1; dann Echo "Command1 Nachfolger" else echo "command1 fehlgeschlagen" beenden 1 fi case "$ (command2)" im "Erfolg") echo "command2 erfolgreich" ;; "Fehler") Echo "Command2 fehlgeschlagen"; Ausgang 1 ;; ESAC # Diese Zeile wird nur erreicht, wenn alle obigen Befehle erfolgreich sein können. "Alle Befehle erfolgreich abgeschlossen"
    12345678910111213141516171819#!/bin/bash set -e # einige Befehle, die möglicherweise fehlschlagen. dann Echo "Command1 Nachfolger" else echo "command1 fehlgeschlagen" beenden 1fi case "$ (command2)" im "Erfolg") echo "command2 erfolgreich" ;; "Fehler") Echo "Command2 fehlgeschlagen"; Beenden 1 ;; ESAC # Diese Zeile wird nur erreicht, wenn alle obigen Befehle nach Erfolg "alle Befehle erfolgreich ausgefüllt" werden

    In diesem Beispiel wird in der Anweisung verwendet.

  5. Sie können auch die verwenden '&&' Der Bediener, um einen Befehl oder einen Befehlsblock nur auszuführen, wenn der vorhergehende Befehl erfolgreich ist. Zum Beispiel: #!/bin/bash set -e # Einige Befehle, die den Befehl && Befehl && Befehl und Befehl 3 fehlschlagen können. Diese Zeile wird nur erreicht, wenn alle obigen Befehle erfolgreich sein können. "Alle Befehle erfolgreich ausgefüllt"
    123456789#!/bin/bash set -e # Einige Befehle, die möglicherweise COMMAND1 && Befehl2 && Befehl 3 fehlschlagen

    In diesem Beispiel wird Command2 nur ausgeführt, wenn der Befehl 1 erfolgreich ist und der Befehl3 nur ausgeführt wird, wenn der Befehl1 und der Befehl 2 erfolgreich sind.

Einpacken

Sie können den Befehl Trap verwenden, um auch andere Signale zu fangen, wie z Int (Interrupt) oder BEGRIFF (beenden). Für weitere Informationen können Sie die Bash -Man -Seite konsultieren oder online nach Tutorials und Beispielen suchen.

ich hoffe das hilft! Lassen Sie mich wissen, wenn Sie Fragen haben.