Respostas:
Você pode usar some_command
como sua condição de teste.
while ! some_command; do sleep 1; done
A condição permanecerá verdadeira enquanto some_command
sair com um erro.
Ou uma maneira mais detalhada, se você quiser fazer verificações adicionais:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
É para isso que serve o until
loop:
until some_command
do sleep 1
done
É a negação lógica de um while
loop.
until
LoopO until
loop deve executar continuamente uma lista composta desde que outra lista composta tenha um status de saída diferente de zero.
O formato do loop até é o seguinte:
até lista-composta-1 faça lista-composta-2 feito
until
comando será concluído. Caso contrário, a lista composta 2 será executada e o processo se repetirá.Você pode apenas fazer:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
isso tem a desvantagem de que ele sempre dorme um segundo primeiro
Se você deseja poder sair de um número de comandos para sair com 0, você pode:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
o que, obviamente, também funciona por apenas some_command
[
e ]
contornar os comandos.
Nem while ! ...
nem until ...
trabalhos sobre os sistemas que congelou seu ambiente shell antes POSIX.1-2001. Isso, no entanto, faz.
while :; do
if some command; then
break
fi
sleep 1
done
Se você não precisa de portabilidade total, por que está escrevendo um script de shell? É mais provável que o Perl esteja disponível que o Bash.
sleep 1 while 0 != system qw(some command);
(Como acima, sleep
o comando é executado apenas se o comando falhar.)