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

Bash Exit-Befehl und Exit-Codes

Beim Schreiben von Bash-Skripten müssen Sie das Skript häufig beenden, wenn eine bestimmte Bedingung erfüllt ist, oder basierend auf dem Exit-Code eines Befehls Maßnahmen ergreifen.

In diesem Artikel behandeln wir den exit von Bash eingebauter Befehl und die Exit-Status der ausgeführten Befehle.

Exit-Status #

Jeder Shell-Befehl gibt einen Exit-Code zurück, wenn er beendet wird, entweder erfolgreich oder nicht erfolgreich.

Per Konvention zeigt ein Exit-Code von Null an, dass der Befehl erfolgreich abgeschlossen wurde, und ein Exit-Code ungleich Null bedeutet, dass ein Fehler aufgetreten ist.

Die spezielle Variable $? gibt den Exit-Status des zuletzt ausgeführten Befehls zurück:

date &> /dev/nullecho $?

Das date Befehl erfolgreich abgeschlossen, und der Beendigungscode ist Null:

0

Wenn Sie versuchen, ls auszuführen bei einem nicht existierenden Verzeichnis ist der Exit-Code ungleich Null:

ls /nonexisting_dir &> /dev/nullecho $?
2

Der Statuscode kann verwendet werden, um herauszufinden, warum der Befehl fehlgeschlagen ist. Die Manpage jedes Befehls enthält Informationen zu den Exit-Codes.

Beim Ausführen einer Pipeline mit mehreren Befehlen ist der Exit-Status der Pipeline der des letzten Befehls:

sudo tcpdump -n -l | tee file.outecho $?

Im obigen Beispiel echo $? druckt den Ausgangscode des tee Befehl.

Bash exit Befehl #

Der exit Der Befehl verlässt die Shell mit dem Status N . Es hat die folgende Syntax:

exit N

Wenn N nicht angegeben, ist der Exit-Statuscode der des zuletzt ausgeführten Befehls.

Bei Verwendung in Shell-Skripten der Wert, der als Argument an exit übergeben wird Der Befehl wird als Exit-Code an die Shell zurückgegeben.

Beispiele #

Der Exit-Status der Befehle kann in bedingten Befehlen wie if verwendet werden . Im folgenden Beispiel grep wird mit Null beendet (was beim Shell-Scripting wahr bedeutet), wenn die „Suchzeichenfolge“ in filename gefunden wird :

if grep -q "search-string" filename then
  echo "String found."
else
  echo "String not found."
fi

Beim Ausführen einer Liste von Befehlen, die durch && getrennt sind (UND) oder || (OR) bestimmt der Beendigungsstatus des Befehls, ob der nächste Befehl in der Liste ausgeführt wird. Hier das mkdir Befehl wird nur ausgeführt, wenn cd gibt Null zurück:

cd /opt/code && mkdir project

Wenn ein Skript mit exit endet ohne Angabe eines Parameters ist der Exit-Code des Skripts der letzte im Skript ausgeführte Befehl.

~/script.sh
#!/bin/bash

echo "doing stuff..."

exit

Verwenden Sie einfach exit ist dasselbe wie exit $? oder Weglassen des exit .

Hier ist ein Beispiel, das zeigt, wie das Skript beendet wird, wenn es von einem Nicht-Root-Benutzer aufgerufen wird:

#!/bin/bash

if [[ "$(whoami)" != root ]]; then
  echo "Only user root can run this script."
  exit 1
fi

echo "doing stuff..."

exit 0

Wenn Sie das Skript als Root ausführen, ist der Exit-Code null. Andernfalls wird das Skript mit dem Status 1 beendet .

Schlussfolgerung #

Jeder Shell-Befehl gibt beim Beenden einen Exit-Code zurück. Der exit Der Befehl wird verwendet, um eine Shell mit einem bestimmten Status zu verlassen.

Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.


Linux
  1. Unterschied zwischen ' und ' in der Befehlszeile (bash)??

  2. eval-Befehl in Bash und seine typischen Verwendungen

  3. Exit-Code der Variablenzuweisung zur Befehlsersetzung in Bash

  4. Bash:Schleife, bis der Befehlsausgangsstatus gleich 0 ist

  5. Bash - Datumsbefehl und Leerzeichen

Bash las Befehl

Bash Heredoc

Bash-Quellbefehl

Verlaufsbefehl in Linux (Bash-Verlauf)

Bash-printf-Befehl

Bash-Skripting (II)