Réponses:
Vous pouvez utiliser some_command
comme condition de test.
while ! some_command; do sleep 1; done
La condition restera vraie tant qu'elle se some_command
termine avec une erreur.
Ou d'une manière plus détaillée si vous souhaitez effectuer des vérifications supplémentaires:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
Voici à quoi sert la until
boucle:
until some_command
do sleep 1
done
C'est la négation logique d'une while
boucle.
until
boucleLa until
boucle doit exécuter en continu une liste composée tant qu'une autre liste composée a un état de sortie non nul.
Le format de la boucle jusqu'à est le suivant:
jusqu'à compound-list-1 faire composé-liste-2 terminé
until
commande se termine. Sinon, la liste composée-2 doit être exécutée et le processus se répète.Vous pouvez simplement faire:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
cela a cependant l'inconvénient qu'il dort toujours une seconde en premier
Si vous voulez pouvoir quitter l'une des nombreuses commandes pour quitter avec 0, vous pouvez faire:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
qui bien sûr fonctionne aussi pour seulement some_command
[
et ]
autour des commandes.
Ni while ! ...
ne until ...
fonctionne sur les systèmes qui ont gelé leur environnement shell avant POSIX.1-2001. Cela, cependant, le fait.
while :; do
if some command; then
break
fi
sleep 1
done
Si vous n'avez pas besoin d'une portabilité totale, pourquoi écrivez-vous un script shell? Perl est plus susceptible d'être disponible que Bash.
sleep 1 while 0 != system qw(some command);
(Comme ci-dessus, le sleep
n'est exécuté que si la commande échoue.)