GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fehlerbehandlung in Bash-Skripten

Skripterstellung ist eines der wichtigsten Tools für einen Systemadministrator, um eine Reihe von täglichen Aktivitäten wie das Ausführen von Sicherungen, das Hinzufügen von Benutzern/Gruppen, das Installieren/Aktualisieren von Paketen usw. zu verwalten. Beim Schreiben eines Skripts ist die Fehlerbehandlung eines der wichtigsten zu verwaltende Dinge.

Dieser Artikel zeigt einige grundlegende/fortgeschrittene Techniken zum Umgang mit der Fehlerbehandlung beim Bash-Skripting. Ich erläutere, wie man die Fehlercodes erhält, während der Ausführung des Skripts eine ausführliche Ausgabe erhält, wie man mit der Debug-Funktion und der Standardfehlerumleitung umgeht. Mit diesen Techniken können Systemadministratoren ihre tägliche Arbeit erleichtern.

[ Den Lesern gefiel auch:Bash-Befehlszeilen-Exit-Codes entmystifiziert ]

Exit-Status

In Bash-Skripten $? druckt den Exit-Status. Wenn es Null zurückgibt, bedeutet dies, dass kein Fehler vorliegt. Wenn es nicht null ist, können Sie daraus schließen, dass die frühere Aufgabe ein Problem hat.

Ein grundlegendes Beispiel ist wie folgt:

$ cat myscript.sh
           #!/bin/bash
           mkdir learning
           echo $?

Wenn Sie das obige Skript einmal ausführen, wird 0 ausgegeben da das Verzeichnis nicht existiert, wird es vom Skript erstellt. Natürlich erhalten Sie einen Wert ungleich Null, wenn Sie das Skript ein zweites Mal ausführen, wie unten zu sehen:

$ sh myscript.sh
mkdir: cannot create directory 'learning': File exists
1

Best Practices

Es wird immer empfohlen, den Debug-Modus durch Hinzufügen des -e zu aktivieren Option zu Ihrem Shell-Skript wie unten:

$ 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

Sie können eine Debug-Funktion wie unten schreiben, die hilft, sie jederzeit aufzurufen, anhand des folgenden Beispiels:

$ 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"

Was druckt:

$ ./debug.sh
Testing Debudding
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5

Standardfehlerumleitung

Sie können alle Systemfehler mithilfe von Standardfehlern, die durch die Zahl 2 gekennzeichnet sind, in eine benutzerdefinierte Datei umleiten . Führen Sie es in normalen Bash-Befehlen aus, wie unten gezeigt:

$ mkdir users 2> errors.txt
$ cat errors.txt
mkdir: cannot create directory ‘users’: File exists

Meistens ist es schwierig, die genaue Zeilennummer in Skripten zu finden. Um die Zeilennummer mit dem Fehler zu drucken, verwenden Sie die PS4 Option (unterstützt mit Bash 4.1 oder höher). Beispiel unten:

$ cat test3.sh
#!/bin/bash
PS4='LINENO:'

set -x
echo "hello World"
mkdiir testing

Sie können die Zeilennummer leicht sehen, während Sie die Fehler lesen:

$ /test3.sh
5: echo 'hello World'
hello World
6: mkdiir testing
./test3.sh: line 6: mkdiir: command not found

[ Holen Sie sich dieses kostenlose E-Book:Verwalten Ihrer Kubernetes-Cluster für Dummies. ]

Abschluss

Das Verwalten von Fehlern ist eine Schlüsselqualifikation für Administratoren beim Schreiben von Skripts. Diese Tipps sollen Ihnen das Leben bei der Fehlerbehebung von Bash-Skripten oder sogar allgemeinen Befehlen erleichtern.


Linux
  1. Verwenden von Bash für die Automatisierung

  2. Lernen Sie die Bash-Fehlerbehandlung anhand eines Beispiels kennen

  3. Typeset -a Gibt Fehler im Skript an?

  4. Verwenden Sie die Erweiterung .sh oder .bash für Bash-Skripte?

  5. Gemeinsame Nutzung von Variablen über mehrere Shell-Skripte hinweg?

Bash-Skripting – Analysieren Sie Argumente in Bash-Skripten mithilfe von getopts

So erstellen Sie Dokumente mit Bash-Skripten

So verwenden Sie den Echo-Befehl in Bash-Skripten unter Linux

Fehlerbehebung „Bash:Command Not Found“-Fehler in Linux

Verwenden des Linux-Dirname-Befehls in Bash-Skripten

Bash-Anfängerserie Nr. 3:Übergabe von Argumenten an Bash-Skripte