2013-08-28 25 views
47

Voglio scrivere uno script Bash per elaborare il testo, che potrebbe richiedere un ciclo while.Come uscire da un loop in Bash?

Per 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 di solito usato e, come tutti gli esempi classici che ho letto hanno mostrato, è questo:

while read something; 
do 
... 
done 

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

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

risposta

66

Non è così diverso in bash.

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

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


Ci sono molti modi si possono impostare e testare il valore di done al fine di uscire dal ciclo; quello che mostro in precedenza dovrebbe funzionare in qualsiasi shell compatibile con POSIX.

25
while true ; do 
    ... 
    if [ something ]; then 
     break 
    fi 
done 
+1

Non sono necessarie le parentesi intorno a 'true'. – chepner

+0

Grazie a @chepner, molto obbligato. – lurker

+0

Grazie. La tua risposta è giusta, ma posso accettarne solo una. Ti meriti l'upvote. – lulyon