web-dev-qa-db-fra.com

Comment sortir d'une boucle dans Bash?

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 à celui. Mais ce que j’ai l'habitude d'utiliser et comme tous les exemples classiques que j'ai lus l'ont montré, 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?

116
lulyon

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, la boucle s'exécute jusqu'à ce que done reçoive une valeur non nulle.


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

150
chepner
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
50
lurker