A sintaxe é:
while
first list of commands
do
second list of commands
done
que executa a segunda lista de comandos em um loop desde que a primeira lista de comandos (portanto, a última execução nessa lista) seja bem-sucedida.
Na primeira lista de comandos , você pode usar o [
comando para fazer vários tipos de testes ou o :
comando nulo que não faz nada e retorna sucesso, ou qualquer outro comando.
while :; do cmd; done
Corre cmd
repetidamente para sempre, como :
sempre retorna sucesso. Esse é o laço eterno . Você poderia usar o true
comando para torná-lo mais legível:
while true; do cmd; done
As pessoas costumavam preferir o :
que :
sempre foi construído, enquanto true
não era (há muito tempo; a maioria das conchas já foi true
construída hoje em dia) ¹.
Outras variantes que você pode ver:
while [ 1 ]; do cmd; done
Acima, chamamos o [
comando para testar se a sequência "1" não está vazia (portanto, sempre também verdadeira)
while ((1)); do cmd; done
Usando a ((...))
sintaxe Korn / bash / zsh para imitar o while(1) { ...; }
de C.
Ou as mais complicadas gosto until false; do cmd; done
, until ! true
...
Às vezes, esses são apelidos como:
alias forever='while :; do'
So you can do something like:
forever cmd; done
Poucas pessoas percebem que a condição é uma lista de comandos. Por exemplo, você vê pessoas escrevendo:
while :; do
cmd1
cmd2 || break
cmd3
done
Quando eles poderiam ter escrito:
while
cmd1
cmd2
do
cmd3
done
Faz sentido que seja uma lista, pois muitas vezes você também deseja fazer coisas como while cmd1 && cmd2; do...; done
listas de comandos.
De qualquer forma, observe que [
é um comando como outro qualquer (embora esteja embutido em shells modernos do tipo Bourne), ele não precisa ser usado apenas nas listas de condições if
/ while
/ until
e essas listas de condições não têm para usar esse comando mais do que qualquer outro comando.
Also :
também é mais curto e aceita argumentos (que são ignorados). Enquanto o comportamento de true
ou false
não for especificado, se você passar algum argumento. Então, pode-se fazer, por exemplo:
while : you wait; do
something
done
Mas, o comportamento de:
until false is true; do
something
done
não é especificado (embora funcione na maioria das shell / false
implementações).
:
não faz nada, mas sempre sai com o código de retorno 0. Portanto, é o mesmo que erawhile true
(assumindo que seu sistema possui umtrue
executável).