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

So erhalten Sie den Exit-Status in einer Bash-Schleife

So etwas?

while true; do
    case $RANDOM in *0) exit 27 ;; esac
done

Oder so?

rc=0
for file in *; do
    grep fnord "$file" || rc=$?
done
exit $rc

Die eigentliche Frage besteht darin, zu entscheiden, ob der Exit-Code der Schleife Erfolg oder Misserfolg sein soll, wenn eine Iteration fehlschlägt. Es gibt Szenarien, in denen das eine sinnvoller ist als das andere, und andere, in denen es überhaupt nicht eindeutig ist.


Der Status der Schleife ist der Status des zuletzt ausgeführten Befehls. Sie können break verwenden, um aus der Schleife auszubrechen, aber wenn der Break erfolgreich ist, dann ist der Status der Schleife 0 . Sie können jedoch eine Subshell verwenden und beenden, anstatt zu brechen. Mit anderen Worten:

for i in foo bar; do echo $i; false; break; done; echo $?  # The loop succeeds
( for i in foo bar; do echo $i; false; exit; done ); echo $? # The loop fails

Sie können die Schleife auch in eine Funktion einfügen und einen Wert davon zurückgeben. zB:

in() { local c="$1"; shift; for i; do test "$i" = "$c" && return 0; done; return 1; }

Das Bash-Handbuch sagt:

while list-1; do list-2; done
until list-1; do list-2; done
  [..]The exit status of the while and until commands is the exit status
  of the last command executed in list-2, or zero if none was executed.[..]

Der letzte Befehl, der innerhalb ausgeführt wird die Schleife ist break . Und der Exit-Wert von break 0 ist (siehe:help break ).

Deshalb wird Ihr Programm immer mit 0 beendet.


Linux
  1. Wie kann man die Ausgabe von Grep unterdrücken, sodass nur der Exit-Status zurückgegeben wird?

  2. Wie stoppe ich das Loop Bash-Skript im Terminal?

  3. Bash + So beenden Sie beide Male das sekundäre Skript und das Hauptskript

  4. Wie wertet Bash folgenden Code aus?

  5. Wie erhalte ich den Exit-Status eines Shell-Befehls, der in GNU Makefile verwendet wird?

Bash Continue:Wie man eine Schleife fortsetzt

So verwenden Sie den Bash-Lesebefehl

Bash Break:So verlassen Sie eine Schleife

So erhalten Sie die Größe eines Verzeichnisses in Linux

Die Bash FOR-Schleife erklärt und vereinfacht

Wie bekomme ich eine Netzmaske von Bash?