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/null
echo $?
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/null
echo $?
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.out
echo $?
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.
#!/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.