So erfassen und behandeln Sie Fehler in Ihren Bash -Skripten
- 2497
- 715
- Hr. Moritz Bozsik
Wir können den Befehl Trap verwenden, um das Fehlersignalsystem während der Skriptausführung vom System zu fangen. Dann können Sie einen Shell -Befehl ausführen oder eine Funktion aufrufen. Auf diese Weise können Sie Ihren benutzerdefinierten Skriptcode auf einem Fehler ausführen, der in einem Bash -Skript aufgetreten ist.
Dies kann hilfreich sein, um teilweise Änderungen, die Datenbankverbindungen oder den E -Mail -Status für die betroffenen Personen usw. zurückzuversetzen, usw. Sie können Trap -Befehle mit verwenden 'IRREN' Signale wie:
Trap 'on_error_function' errand
Wenn ein Fehler in einem Shell -Skript generiert wird, wird eine Funktion mit dem Namen 'On_error_function' Ihres Shell -Skripts ausgeführt. Anstatt eine Funktion aufzurufen, können Sie einfach auch einen Befehl ausführen.
Beispiel: Führen Sie eine Funktion zum Fehler in Bash aus
Lassen Sie uns mit einem Beispiel verstehen. Erstellen Sie ein Beispiel -Shell -Skript und erstellen Sie eine Funktion mit jedem Namen. Dann fügen Sie die hinzu fangen
Befehl mit der Funktion für IRREN Signal. Fügen Sie als nächstes einen einfachen Befehl hinzu, der einen Fehler erzeugt.
123456789 | #!/usr/bin/env bash on_error () echo "Ein Fehler ist aufgetreten" Trap 'On_Error' Err ls ~/dire_not_exists |
Führen Sie das obige Skript aus und Sie sollten die folgenden Ergebnisse sehen:
Ausgabe: LS: Kann nicht zugreifen '/home/tecadmin/dir_not_exists': Keine solche Datei oder Verzeichnis Es ist ein Fehler aufgetreten
Sie können sehen, dass der Fehler gefangen ist und die Funktion on_Error ()
wird vom Bash -Skript ausgeführt.
Beispiel: Führen Sie einen Befehl zum Fehler in Bash aus
Lassen Sie uns noch ein Beispiel sehen. Hier führen wir einen Befehl aus, wenn ein Fehler im Shell -Skript auftritt.
#!/usr/bin/env bash falle 'echo ohhh nein!'Err ls ~/dir_not_exists12345 | #!/usr/bin/env bash falle 'echo ohhh nein!'Err ls ~/dir_not_exists |
Im obigen Skript definieren wir keine separate Funktion. Führen Sie einfach einen Echo -Befehl zum Fehler aus. Führen Sie das obige Skript aus und sehen Sie die Ergebnisse an.
Ausgabe: LS: Kann nicht zugreifen '/home/tecadmin/dir_not_exists': Keine solche Datei oder Verzeichnis ohhh nein!
Beispiel: Holen Sie sich die Zeilennummer des Fehlers aufgetreten
Sie können auch die Zeilennummer herausfinden, bei der der Fehler im Bash -Skript zusammen mit dem Skriptnamen aufgetreten ist. Verwenden Sie dazu den eingebauten "Anrufer" mit den Bash -integrierten "Anrufer".
#!/usr/bin/env bash on_error () echo "Fehler in: $ (Anrufer)"> & 2 Trap 'On_error' err ls ~/dire_not_exists123456789 | #!/usr/bin/env bash on_error () echo "Fehler in: $ (Anrufer)"> & 2 Trap 'On_error' err ls ~/dire_not_exists |
Führen Sie das obige Skript aus und sehen Sie die Ergebnisse an. Sie sehen den Skriptnamen und die Zeilennummer, bei der der Fehler aufgetreten ist.
Ausgabe: LS: Kann nicht zugreifen '/home/tecadmin/dir_not_exists': Keine solche Datei oder Verzeichnisfehler in: 9 gefunden: 9 ./Skript.Sch
Abschluss
Danke, dass du diesen Artikel gelesen hast. Hoffentlich hilft Ihnen dieses Tutorial beim besseren Schreiben von Shell -Skripten, indem Sie den Fehler erfassen und Maßnahmen ergreifen.
Denken Sie auch daran, dass die Err -Trap nur die Laufzeitfehler auffängt. Wie wenn ein Befehl den Statuscode ungleich Null zurückgibt. Es fängt die Syntaxfehler nicht an, da im Fall des Syntaxfehlers das Skript fehlschlägt, ohne einen Befehl auszuführen.
- « Ausführen mehrerer Befehle gleichzeitig unter Linux
- (Gelöst) Unbekannte Kollation UTF8MB4_Unicode_520_CI »