J'avais l'habitude d'écrire mes scripts comme ceci:
some_command
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
Cela m'a toujours énervé de devoir écrire some_command
deux fois. Puis-je le mettre d'une manière ou d'une autre dans la section de test de boucle?
shell-script
Mihai
la source
la source
while ! some_command; do several; commands; sleep 1; done
Voici à quoi sert la
until
boucle:C'est la négation logique d'une
while
boucle.La spécification dit:
La
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:
until
commande se termine. Sinon, la liste composée-2 doit être exécutée et le processus se répète.la source
Vous pouvez simplement faire:
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:
qui bien sûr fonctionne aussi pour seulement
some_command
la source
[
et]
autour des commandes.Ni
while ! ...
neuntil ...
fonctionne sur les systèmes qui ont gelé leur environnement shell avant POSIX.1-2001. Cela, cependant, le fait.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.
(Comme ci-dessus, le
sleep
n'est exécuté que si la commande échoue.)la source