Come uscire da un loop in Bash?


150

Voglio scrivere uno script Bash per elaborare il testo, che potrebbe richiedere un ciclo while.

Ad esempio, un ciclo while in C:

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

Voglio scrivere uno script Bash equivalente a quello. Ma quello che ho usato di solito e come hanno dimostrato tutti gli esempi classici che ho letto, è questo:

while read something;
do
...
done

Non offre alcun aiuto su come fare while(1){}e break;, che è ben definito e ampiamente usato in C, e non devo leggere i dati per stdin.

Qualcuno potrebbe aiutarmi con un equivalente di Bash del codice C sopra?

Risposte:


189

Non è così diverso in bash.

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

:è il comando no-op; il suo stato di uscita è sempre 0, quindi il ciclo viene eseguito fino a quando non doneviene assegnato un valore diverso da zero.


Esistono molti modi per impostare e testare il valore doneper uscire dal loop; quello che mostro sopra dovrebbe funzionare in qualsiasi shell compatibile con POSIX.


Va bene usare donecome nome variabile? È una parola chiave della shell ... Almeno un po 'confusa.
Michael Dorst,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.