Como usar o loop while no prompt de comando csh shell?

1

Estou tentando usar o loop while no prompt de comando csh shell no RHEL 7.2, mas estou recebendo o erro abaixo:

$ while true
while: Expression Syntax.

O mesmo está funcionando em bash shell.

    
por dcds 15.09.2017 / 14:38

3 respostas

2

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.

    
por 15.09.2017 / 15:16
2
set i = 1
while ($i < 5)
   echo "i is $i"
   @ i++
end

ou

set i = 1
while (1)
    echo "i is $i"
    @ i++
    if ($i >= 5) break
end

Estes resultados:

i is 1
i is 2
i is 3
i is 4

csh é largamente substituído pelos sh -shells atualmente, especialmente na plataforma Linux (onde o uso de csh nunca foi realmente difundido para começar). A maioria dos BSDs também oferece conchas compatíveis com sh como seu shell interativo padrão.

Se você estiver aprendendo programação de shell, considere aprender o sh shell, a menos que seu trabalho exija que você gere csh e tcsh scripts (nesse caso, você pode usar um sh shell, como bash , como seu shell interativo, independentemente dos tipos de scripts com os quais você trabalha).

    
por 15.09.2017 / 15:14
-1

Tente isso,

da csh shell , man while page

set x 0
while {$x<10} {
     puts "x is $x"
     incr x
}
    
por 15.09.2017 / 14:43

Tags