erro ao usar o loop while no script bash

1

Estou recebendo um erro 2: [: missing ] ao usar o seguinte while loop:

#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
  echo "please type something (bye quits) "
  read INPUT_STRING
  echo "you tuped : $INPUT_STRING "
done
    
por user268867 02.11.2013 / 05:47

1 resposta

2

Você precisa adicionar espaços em torno da condição de while :

while [ "$INPUT_STRING" != "bye" ]

Isso pode parecer um pouco estranho para pessoas com experiência em programação, mas as razões são estas:

  1. while espera uma lista de comandos. O fluxo de controle depende do status de saída deste comando: desde que seja zero, o corpo continua a ser executado.

  2. [ expression ] é uma forma alternativa de test expression . Aqui, test é um comando que avalia a expressão e retorna seu valor na forma do status de saída do comando. Certifique-se de retornar um status de saída zero se a expressão (logicamente) for avaliada como um valor true booleano, para que possa ser usada nos comandos if e while .

  3. Na verdade, os arquivos test e [ são arquivos executáveis no linux (normalmente eles são encontrados em /usr/bin ). No entanto, alguns shells, como bash , usam comandos internos com os mesmos nomes.

  4. Como test e [ são (tecnicamente) comandos simples, seus argumentos devem ser separados do nome do comando e entre si com um ou mais caracteres brancos.

por 02.11.2013 / 08:43