if [ ... ];
echo "in downtime, exit";
then exit
fi
Como as outras respostas mencionam, a palavra-chave then
está no lugar errado nessa condição if
. (Não está faltando, do ponto de vista da linguagem shell. Se fosse, isso seria um erro de sintaxe.)
O que acontece aqui, é que os comandos ambos antes de then
são considerados como parte da condição, e o valor de retorno de todo o lote é usado para escolher se a peça está em then
corre. Com comandos separados por ponto-e-vírgula, apenas o status de saída do último comando é importante.
Como echo
provavelmente será sempre bem-sucedido, a ramificação condicional sempre será executada. Algo como if true; false; then echo something; fi
nunca executaria o echo
. Sugiro colocar a palavra-chave then
na mesma linha que a condição, para evitar adicionar algo acidentalmente entre elas.
Com if
, o uso de vários comandos na condição provavelmente será confuso, mas com while
pode ter seus usos: poderíamos ter algo assim:
while value=$(somecommand) ; [ "$value" != 0 ] ; do
echo "do some work with $value"
done
Tanto a atribuição quanto o teste são executados em cada iteração do loop.