Comment sortir d'une boucle dans Bash?

150

Je veux écrire un script Bash pour traiter du texte, ce qui peut nécessiter une boucle while.

Par exemple, une boucle while en C:

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

Je veux écrire un script Bash équivalent à cela. Mais ce que j'utilisais habituellement et comme l'ont montré tous les exemples classiques que j'ai lus, c'est ceci:

while read something;
do
...
done

Il n'offre aucune aide sur la façon de faire while(1){}et break;, qui est bien défini et largement utilisé en C, et je n'ai pas à lire les données pour stdin.

Quelqu'un pourrait-il m'aider avec un équivalent Bash du code C ci-dessus?

lulyon
la source

Réponses:

189

Ce n'est pas si différent dans bash.

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

:est la commande no-op; son état de sortie est toujours 0, donc la boucle s'exécute jusqu'à ce donequ'une valeur différente de zéro soit donnée.


Il existe de nombreuses façons de définir et de tester la valeur de donepour sortir de la boucle; celui que je montre ci-dessus devrait fonctionner dans n'importe quel shell compatible POSIX.

chepner
la source
Peut-on utiliser donecomme nom de variable? C'est un mot-clé shell ... Un peu déroutant pour le moins.
Michael Dorst
59
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
rôdeur
la source