-bash: erro de sintaxe próximo ao token inesperado `;'

-bash: erro de sintaxe próximo ao token inesperado `;'

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 1caractere =ou 2.

Por exemplo, se houver um arquivo chamado 2no diretório atual, isso se tornará:

se 2 então echo fi;

Isto é, execute o 2comando com 4 argumentos: 2, then, echoe fi, como o primeiro comando na ifparte de uma if/then/elif/else/fiinstruçã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 ifconstruçã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. É -eqao comparar números ou =ao comparar strings.

if [ 1 -eq 2 ]; then echo 'y'; fi

informação relacionada