La syntaxe est:
while
first list of commands
do
second list of commands
done
qui exécute la deuxième liste de commandes dans une boucle tant que la première liste de commandes (donc la dernière exécution de cette liste) réussit.
Dans cette première liste de commandes , vous pouvez utiliser la [
commande pour effectuer différents types de tests, ou vous pouvez utiliser la :
commande null qui ne fait rien et renvoie le succès, ou toute autre commande.
while :; do cmd; done
S'exécute cmd
encore et encore pour :
toujours comme toujours le succès. C'est la boucle pour toujours . Vous pouvez utiliser la true
commande à la place pour la rendre plus lisible:
while true; do cmd; done
Les gens préféraient ce :
qui :
était toujours intégré alors que ce true
n'était pas le cas (il y a longtemps; la plupart des obus sont true
intégrés de nos jours) ¹.
D'autres variantes que vous pourriez voir:
while [ 1 ]; do cmd; done
Ci-dessus, nous appelons la [
commande pour tester si la chaîne "1" n'est pas vide (donc toujours aussi vraie)
while ((1)); do cmd; done
Utilisation de la ((...))
syntaxe Korn / bash / zsh pour imiter le while(1) { ...; }
C.
Ou des plus alambiqués comme until false; do cmd; done
, until ! true
...
Ceux-ci sont parfois aliasés comme:
alias forever='while :; do'
Vous pouvez donc faire quelque chose comme:
forever cmd; done
Peu de gens réalisent que la condition est une liste de commandes. Par exemple, vous voyez des gens écrire:
while :; do
cmd1
cmd2 || break
cmd3
done
Quand ils auraient pu écrire:
while
cmd1
cmd2
do
cmd3
done
Il est logique que ce soit une liste car vous voulez souvent faire des choses comme des while cmd1 && cmd2; do...; done
listes de commandes.
Dans tous les cas, notez qu'il [
s'agit d'une commande comme les autres (bien qu'elle soit intégrée dans des shells modernes de type Bourne), elle ne doit pas être utilisée uniquement dans les listes de conditions if
/ while
/ until
, et ces listes de conditions n'ont pas d'utiliser cette commande plus que toute autre commande.
¹ :
est également plus court et accepte les arguments (qu'il ignore). Alors que le comportement de true
ou false
n'est pas spécifié si vous lui passez un argument. On peut donc faire par exemple:
while : you wait; do
something
done
Mais, le comportement de:
until false is true; do
something
done
n'est pas spécifié (bien qu'il fonctionnerait dans la plupart des shell / false
implémentations).
:
ne fait rien mais quitte toujours avec le code retour 0. Donc, c'est la même chosewhile true
(en supposant que votre système a untrue
exécutable).