Wie kann man in Bash aus einer Schleife ausbrechen?


150

Ich möchte ein Bash-Skript schreiben, um Text zu verarbeiten, für das möglicherweise eine while-Schleife erforderlich ist.

Zum Beispiel eine while-Schleife in C:

int done = 0;
while(1) {
  ...
  if(done) break;
}

Ich möchte ein Bash-Skript schreiben, das dem entspricht. Aber was ich normalerweise verwendet habe und wie alle klassischen Beispiele, die ich gelesen habe, gezeigt haben, ist Folgendes:

while read something;
do
...
done

Es bietet keine Hilfe zur Vorgehensweise while(1){}und break;, was in C gut definiert und weit verbreitet ist, und ich muss keine Daten für stdin lesen.

Könnte mir jemand mit einem Bash-Äquivalent des obigen C-Codes helfen?

Antworten:


189

Es ist nicht so anders in bash.

done=0
while : ; do
  ...
  if [ "$done" -ne 0 ]; then
      break
  fi
done

:ist der No-Op-Befehl; Der Exit-Status ist immer 0, daher wird die Schleife ausgeführt, bis doneein Wert ungleich Null angegeben wird.


Es gibt viele Möglichkeiten, den Wert von festzulegen und zu testen, doneum die Schleife zu verlassen. Die oben gezeigte sollte in jeder POSIX-kompatiblen Shell funktionieren.


Ist es in Ordnung, doneals Variablenname zu verwenden? Es ist ein Shell-Schlüsselwort ... zumindest ein bisschen verwirrend.
Michael Dorst

59
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.