bash script while loop se a variável for verdadeira

2

Eu tenho o seguinte script:

while [ $loop == "true" ]
   do
     //do stuff
   done

mas diz erro em [.

Também isso é executado como um daemon, quando o argumento stop é passado para o script ... o loop deve. Eu estou supondo que a configuração de $ loop para false acabará automaticamente com o loop.

    
por firebird 09.01.2012 / 02:03

2 respostas

1

A melhor maneira de digitar isso seria:

while [ "$loop" = "true" ]

Leia a seção "Elaborando o teste-comando" no seguinte URL: link

    
por 09.01.2012 / 02:14
4

M. Vazquez-Abrams está certo. Isto não tem nada a ver com aspas fazendo coisas que são strings em strings, ou alguma ideia equivocada que = em bash do comando [ embutido é outra coisa senão um comparação de string. (Leia o § 6.4 do Manual do Usuário do Bash, pessoas!) É tudo a ver com o que acontece com os campos vazios depois que a divisão de campo transforma palavras em campos.

Se a variável loop da shell estiver vazia ou nula, então $loop se expandirá para um campo vazio. Após a divisão de campo, os campos vazios são descartados. Observe que a divisão de campo e a verificação de campos vazios precede remoção de cotação. Portanto, "$loop" expande para o campo "" , que não está vazio e, portanto, não é removido. Após a remoção da cotação, é então um campo vazio, que se torna um argumento vazio para o comando.

O comando [ requer que seu operador = tenha dois operandos, antes e depois. Qualquer outra coisa é um erro de sintaxe. Como um campo vazio é removido, a sequência de palavras

[ $loop = true ]
expande para quatro campos
  1. [
  2. =
  3. true
  4. ]

quando o comando [ precisa que cinco esteja sintaticamente correto:

  1. [
  2. =
  3. true
  4. %código%

É claro que a string vazia não é igual à string de quatro caracteres ] , e o status de saída do comando é diferente de zero.

Novamente, tudo isso está no Manual do Usuário do Bash, em §3.5 e §3.5.7. O manual é seu amigo.

    
por 09.01.2012 / 13:16

Tags