it-swarm.com.de

Bedeutung von Exit 0, Exit 1 und Exit 2 in einem Bash-Skript

Ich mache einige Übungsübungen.

Schreiben Sie ein Skript, das eine Monatszahl als Argument erhält und diese Zahl in einen Monatsnamen übersetzt. Das Ergebnis wird auf Standard gedruckt.

Ich habe eine Lösung gefunden:

#test for number of argument

if [ "$#" -eq 0 ] ; 
then
   echo -e "No argument."
   echo -e "Write a number between 1 and 12."
   exit 1
Elif [ "$#" -gt 1 ] ;
then
   echo -e "More than 1 argument."
   echo -e "Write a number between 1 and 12."
   exit 1
else

   numb=$1
   case "$numb" in
      1) echo "Month: January";;
      2) echo "Month: February";;
      3) echo "Month: March";;
      4) echo "Month: April";;
      5) echo "Month: May";;
      6) echo "Month: June";;
      7) echo "Month: July";;
      8) echo "Month: August";;
      9) echo "Month: September";;
     10) echo "Month: October";;
     11) echo "Month: November";;
     12) echo "Month: December";;
      *) echo -e "You wrote a wrong number. Try again with writing number between 1 and 12.";;

   esac
fi
exit 2
exit 0

Was bedeuten exit 1, exit 0 und exit 2 und warum verwenden wir sie?

44

Hier ist eine gute Referenz für Shell-Exit-Codes :

Exit code 0        Success
Exit code 1        General errors, Miscellaneous errors, such as "divide by zero" and other impermissible operations
Exit code 2        Misuse of Shell builtins (according to Bash documentation)        Example: empty_function() {}

Vorsichtsmaßnahme: Die Verwendung des richtigen Beendigungscodes ist nicht erforderlich und wird von der Shell nicht erzwungen. Entwickler können die Anleitung ignorieren, wenn sie dies für sinnvoll halten.

57
user535733

Die Verwendung von exit und einer Zahl ist eine praktische Möglichkeit, das Ergebnis Ihres Skripts anzuzeigen. Es ahmt die Art und Weise nach, wie Bash-Befehle einen Rückkehrcode ausgeben. Bei bash-Befehlen bedeutet der Rückgabewert 0 in der Regel, dass alles fehlerfrei ausgeführt wurde. exit bewirkt außerdem, dass Ihr Skript die Ausführung an diesem Punkt stoppt und zur Befehlszeile zurückkehrt.

Jeder Rückkehrcode, der größer als 0 ist, zeigt eine Art Fehler an, obwohl der Fehler manchmal nicht kritisch ist. Für jeden Befehl sollte es möglich sein, eine Dokumentation zu finden, die Ihnen sagt, was jeder Rückkehrcode bedeutet.

Sie können den Rückkehrcode des letzten Bash-Befehls erhalten, indem Sie die Shell-Variable $? wie folgt verwenden:

$ echo "something"
something
$ echo $?
0
$ cp
cp: missing file operand
Try 'cp --help' for more information.
$ echo $?
1

Wenn Sie dies in einem Skript verwenden, können Sie den Rückkehrcode auf die gleiche Weise abfragen, wenn die Ausführung abgeschlossen ist. So werden Sie sehen, dass mit:

exit 2
exit 0

Ist irgendwie bedeutungslos, da man niemals den Teil exit 0 erreichen kann.

23
Arronical

exit impliziert für sich genommen einen Exit-Wert von Null oder den erfolgreichen Abschluss Ihres Skripts. Sie müssen das Null-Argument nicht zum Exit-Befehl hinzufügen, um den erfolgreichen Abschluss anzuzeigen. Ihr Skript wird möglicherweise (oder wahrscheinlich) erfolgreich beendet, obwohl es auf eine fehlerhafte Bedingung hin überprüft wird. In diesem Fall soll das Programm mit der Fehlerbedingung (oder 1) beendet werden.

echo -e "Enter numbers 1-4" \c"
read NUM
case $NUM in 
    1) echo "one";;
    2) echo "two";;
    3) echo "three";;
    4) echo "four";;
    *) echo "invalid answer"
       exit 1;;
esac

Der Befehl exit in der letzten Zeile muss überhaupt nicht vorhanden sein. Es könnte mit der Null oder gar nicht aufgerufen werden. Ohne Angabe des 1-Arguments für den Befehl exit wäre die Antwort in all diesen Fällen auf den echo $? Null.

Wenn Sie jedoch das Argument 1 für den Befehl exit angeben, lautet die Antwort auf den Befehl echo $? 1. Verwenden Sie also das Argument 1 für den Befehl exit, wenn Sie angeben möchten, dass das Skript mit einer Fehlerbedingung beendet wurde.

3
geekasaurus