Qual é o formato correto para se então?
Experimentei muitas variedades.
O formato deve funcionar na linha de comando quando não estiver em um programa?
$ if [1==2] then echo "y" fi;
> ;
-bash: syntax error near unexpected token `;'
Responder1
Ninguém explicou o erro ainda.
Você digitou:
if [1==2] then echo "y" fi;
;
A primeira linha tinha uma sintaxe perfeitamente válida no que diz respeito ao shell. É do formato:
if cmd args
Neste caso, cmd
é derivado da expansão do [1==2]
globo. [1==2]
é um padrão global que se expande para a lista de arquivos no diretório atual cujo nome consiste em um 1
caractere =
ou 2
.
Por exemplo, se houver um arquivo chamado 2
no diretório atual, isso se tornará:
se 2 então echo fi;
Isto é, execute o 2
comando com 4 argumentos: 2
, then
, echo
e fi
, como o primeiro comando na if
parte de uma if/then/elif/else/fi
instrução.
O erro vem daquele segundo ;
na segunda linha. Você teria recebido a mesma mensagem de erro inserindo ;
apenas isso na linha de comando. ;
deve ser usado para separar comandos, não pode ser usado sozinho dessa forma.
Responder2
A forma correta da if
construção bash é
if something; then command; fi
A forma correta do que você parece estar tentando fazer é
if [ 2 -eq 2 ]; then echo "y"; fi;
Os espaços são importantes no bash.
Responder3
Tente este:
if [ 1 == 2 ]; then echo "y" ; fi
E é melhor usar -eq
, a menos que você queira comparar 1 e 2 como strings.
Link útil:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
Responder4
O ==
operador não existe no Bash. É -eq
ao comparar números ou =
ao comparar strings.
if [ 1 -eq 2 ]; then echo 'y'; fi