você precisa adicionar um espaço entre "e]
$ ./test.sh
Y
YES
$ cat test.sh
#!/bin/bash
read x
if [ $x == "Y" ] || [ $x == "y" ]
then
echo "YES"
else
echo "NO"
fi
Felicidades.
Esta pergunta já tem uma resposta aqui:
Este código gera um erro linha 3: [: missing ']' . Então, por que estou recebendo esse erro?
#!/bin/bash
read x
if [ $x == "Y" ] || [ $x == "y"]
then
echo "YES"
else
echo "NO"
fi
Obrigado antecipadamente.
você precisa adicionar um espaço entre "e]
$ ./test.sh
Y
YES
$ cat test.sh
#!/bin/bash
read x
if [ $x == "Y" ] || [ $x == "y" ]
then
echo "YES"
else
echo "NO"
fi
Felicidades.
O colchete de abertura [
é na verdade um comando (embora também esteja disponível como um shell embutido, mas isso é uma história diferente).
$ which [
/usr/bin/[
O shell executa este comando com as opções fornecidas. No seu caso, haverá uma chamada com as quatro opções $x
, ==
, Y
e ]
e outra com as três opções $x
, ==
e y]
. Isso ocorre porque o shell usa espaço em branco para separar opções de comandos e de outro. Aspas (") não são passadas, mas usadas pelo shell para" escapar "significados especiais de certos caracteres (por exemplo, quando você precisa passar espaço em branco para um comando).
Neste ponto, o shell é feito com os colchetes (e tudo no meio), e cabe ao comando [
fazer algo útil. [
está programado para esperar ]
como seu último parâmetro (por razões óbvias; note que quando chamado como test
, outro nome para o mesmo comando, ]
não é esperado). Devido à falta de espaço em branco, ]
não foi encontrado e [
reclama.
Você tem que usar a chave dupla e incluir suas variáveis com "":
#!/bin/bash
read x;
if [[ "$x" = "Y" || "$x" = "y" ]]; then
echo "YES"
else
echo "NO"
fi;
No entanto, eu prefiro usar:
echo $x |tr '[A-Z]' '[a-z]'
É muito melhor que a declaração if.
Tags bash