A sintaxe dos loops while
em csh
é diferente daquela dos shells parecidos com Bourne. É:
while (arithmetic-expression)
body
end
Quando csh
é interativo, por algum motivo, end
precisa aparecer sozinho em uma linha.
Para que a expressão aritmética teste o sucesso de um comando, você precisa de { cmd }
(espaços são obrigatórios). { cmd }
em expressões aritméticas é resolvido para 1 se o comando for bem-sucedido (saiu com um status de saída 0) ou 0 caso contrário (se o comando saiu com um status de saída diferente de zero).
Então:
while ({ true })
body
end
Mas isso seria um pouco bobo, especialmente considerando que true
não é um comando interno em csh
. Para um loop infinito, você prefere usar:
while (1)
body
end
Por outro lado, em shells POSIX, a sintaxe é:
while cmd; do
body
done
E se você quiser que a condição avalie uma expressão aritmética, será necessário executar um comando que as avalie como expr
, ou ksh
let
/ ((...))
ou test
/ [
comando combinado com $((...))
de expansões aritméticas.