Je sais ce qu'est une while
boucle. Cependant, je ne l'ai vu que fonctionner avec:
while [condition]
while ![condition]
while TRUE (infinite loop)
Où la déclaration suivante while
doit être soit TRUE
ou FALSE
.
Il existe une commande intégrée au shell nommée :
. Il est décrit comme une commande factice ne faisant rien, mais je ne sais pas si c'est la même chose ici, même si cela peut être TRUE
ou FALSE
. C'est peut-être quelque chose de différent, mais quoi?
bash
shell-script
sharkant
la source
la source
:
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).:
commande n'est jamais exécutée, elle ne retournera pas 0. C'est trop pédant à mon avis cependant.Réponses:
La syntaxe est:
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.S'exécute
cmd
encore et encore pour:
toujours comme toujours le succès. C'est la boucle pour toujours . Vous pouvez utiliser latrue
commande à la place pour la rendre plus lisible:Les gens préféraient ce
:
qui:
était toujours intégré alors que cetrue
n'était pas le cas (il y a longtemps; la plupart des obus sonttrue
intégrés de nos jours) ¹.D'autres variantes que vous pourriez voir:
Ci-dessus, nous appelons la
[
commande pour tester si la chaîne "1" n'est pas vide (donc toujours aussi vraie)Utilisation de la
((...))
syntaxe Korn / bash / zsh pour imiter lewhile(1) { ...; }
C.Ou des plus alambiqués comme
until false; do cmd; done
,until ! true
...Ceux-ci sont parfois aliasés comme:
Vous pouvez donc faire quelque chose comme:
Peu de gens réalisent que la condition est une liste de commandes. Par exemple, vous voyez des gens écrire:
Quand ils auraient pu écrire:
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 conditionsif
/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 detrue
oufalse
n'est pas spécifié si vous lui passez un argument. On peut donc faire par exemple:Mais, le comportement de:
n'est pas spécifié (bien qu'il fonctionnerait dans la plupart des shell /
false
implémentations).la source
while :
est une boucle infinie.:
ne fait rien (avec succès).Donc, si vous voulez que votre shell se bloque pour toujours sans rien faire, vous pouvez l'écrire comme
Ou en une seule ligne avec
;
au lieu de nouvelles lignes:while :; do :; done
while :
est généralement utilisé si vous voulez faire quelque chose à plusieurs reprises sans condition spéciale attachée. Vous pourriez utilisercontinue
,break
instructions dans la boucle pour contrôler ou pour déplacer la condition à la fin de la boucle comme unedo ... while
construction.la source
Non, la commande dans la partie condition peut être n'importe quelle commande (*) . Toutes les commandes shell ont une valeur de retour et la
while
boucle (ainsi que laif
conditionnel) prend les valeurs de retour de zéro comme "vrai" et toutes les autres comme "fausses". (* ou une liste de plusieurs commandes, la dernière compte)Quant à
:
, le manuel de Bash indique clairement quel est le statut de retour de celui-ci:L'
help
intégration est encore plus claire:la source
s/any command/any sequence of commands/
, comme le précise Stéphane.