exit Codes bash Tutorial Teil 14

Im letzten Teil habe ich dir gezeigt, wie du Parameter von außen in dein Script übergeben kannst. Die exit Codes machen das genaue Gegenteil, sie geben nach Durchlauf des Scripts Informationen zurück.

bash Logo - exit Codes
Dr. Dirk Colbry, Michigan State
Gnu-bash-logoCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=

exit Codes

Der exit Code ist der Rückgabewert eines Scripts an den aufrufenden Prozess.

exit Kommando

Das builtin exit Kommando dient dazu, den Rückgabewert zu übermitteln.

Dazu ein einfach Beispiel

# /usr/bin/bash

echo "Beispiel für exit Code"
exit 2

Das Script gibt nur einen belanglosen Text aus und setzt dann seinen exit Code auf 2, was normalerweise auf einen Fehler im Script hindeutet.

Variable ${?}

Die bash legt den Rückgabewert des zuletzt ausgeführten Scripts in der Spezialvariable ${?} ab

Ausgabe des exit-Codes von simplexit.sh über ${?}
Olli Graf - raspithek.de
simpleexitCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Ausgabe des exit-Codes von simplexit.sh über ${?}

Dies gilt auch für die Kommandos, die von deinem eigenen Script aufgerufen werden. Wenn du dies nicht mit exit überschreibst, steht nach Beendigung deines Scripts in ${?} der exit Code des zuletzt ausgeführten Kommandos. In simpleexit.sh liefert das echo Kommando den exit Code 0, den wir dann mit exit 2 überschreiben.

Behandlung von exit-Codes

Meist fragst du den exit Code ab, um in deinem Script auf den Fehler eines aufgerufenen Kommandos zu reagieren.

Wir erstellen uns jetzt ein Script sub.sh, das aufgerufen wird. über einen Parameter können wir steuern, welchen exit Code das Script liefert.

# !/usr/bin/bash

if [ "${1}" == "fail" ]; then
  echo " ${0}: failing"
  exit 1
fi


exit 0
Rückgabewerte von sub.sh, einmal ohne Parameter, einmal mit Parameter fail
Olli Graf - raspithek.de
subCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Rückgabewerte von sub.sh, einmal ohne Parameter, einmal mit Parameter fail

Du siehst, dass die Variable ${?} davon abhängt, welchen exit Code sub.sh setzt.

sub.sh wird jetzt im Script ifexit.sh benutzt, um auf den Status zu reagieren:

#! /usr/bin/bash

./sub.sh ${1}

if [ ${?} -eq 0 ]; then
  echo "sub.sh erfolgreich"
else
  echo "sub.sh fehlgeschlagen"
fi

Ein solches Konstrukt benutzt das aufrufende Script meistens, um bei Fehlern des aufgerufenen Scripts zu reagieren, beispielsweise mit einer Userinteraktion, wie fortgefahren werden soll.

Logik Operatoren

Es gibt einen recht einfachen Mechanismus, um ein Kommando nur dann auszuführen, wenn das Kommando davor erfolgreich war. Dazu dient der Operator &&

./sub.sh && echo "erfolgreich"

Hierbei wird das echo Kommando nur dann ausgeführt, wenn sub.sh erfolgreich durchlaufen wurde.

Genau den umgekehrten Fall bildet der Operator || ab. Damit wird das nachfolgende Kommando nur ausgeführt, wenn das vorangestellte Kommando fehlschlägt.

./sub.sh fail || echo "Fehlschlag"
Verknüpfung zweier Kommandos
Olli Graf - raspithek.de
logicCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Verknüpfung zweier Kommandos

&& benutzt du immer dann, wenn ein Kommando von der korrekten Arbeit eines anderen abhängig ist. Mit || kannst du ein alternatives Kommando zum fehlgeschlagenen starten, um die Situation irgendwie noch zu retten.

Fazit

Bei bash Scripten gibt es ein Paradigma: „Schreib ein Script, das eine Sache kann, die dafür aber richtig gut“. Anders ausgedrückt, statt die gesamte Funktionalität in ein einzelnes Script zu packen, ist meistens sinnvoller, für einzelne Aufgaben, eigene kleinere und übersichtlichere Scripte zu schreiben. Parameter und Exit-Codes dienen dabei als Schnittstelle zwischen den einzelnen Teilscripten.

Schreibe einen Kommentar

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner