216 votes

Comment sortir d'une boucle en Bash ?

Je veux écrire un script Bash pour traiter du texte, ce qui pourrait 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'ai utilisé habituellement 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 besoin de lire les données dans stdin.

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

286voto

chepner Points 54078

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

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

: est la commande no-op ; son statut de sortie est toujours 0, donc la boucle se déroule jusqu'à ce que workdone se voit attribuer une valeur non nulle.


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

79voto

lurker Points 16947
while true ; do
    ...
    if [ something ]; then
        break
    fi
done

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X