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?

lulyon
quelle

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.

chepner
quelle
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
Lurker
quelle