-bash: erro de sintaxe próximo ao token inesperado ';' [duplicado]

1
    

Esta pergunta já tem uma resposta aqui:

    

Qual é o formato correto para if then?
Eu tentei 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 ';'
    
por Michael Durrant 30.09.2013 / 17:34

4 respostas

1

Tente este:

if [ 1 == 2 ]; then echo "y" ; fi

É melhor usar -eq , a menos que você queira comparar 1 e 2 como uma string.

link Útil: ligação

    
por 30.09.2013 / 17:41
3

A forma correta da construção bash if é

if something; then command; fi

A forma correta do que você está tentando fazer é

if [ 2 -eq 2 ]; then echo "y"; fi;

Espaços são importantes no bash.

    
por 30.09.2013 / 17:41
2

Ninguém explicou o erro ainda.

Você inseriu:

if [1==2] then echo "y" fi;
;

A primeira linha era uma sintaxe perfeitamente válida no que diz respeito ao shell. É da forma:

if cmd args

Nesse caso, cmd é derivado da expansão do [1==2] glob. [1==2] é um padrão de globbing que se expande para a lista de arquivos no diretório atual cujo nome consiste em um caractere 1 , = ou 2 .

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

se 2 depois echo fi;

Execute o comando 2 com 4 argumentos: 2 , then , echo e fi , como o primeiro comando na parte if de uma instrução if/then/elif/else/fi .

O erro vem do segundo ; na segunda linha. Você teria a mesma mensagem de erro digitando ; sozinho na linha de comando. ; deve ser usado para separar comandos, não pode ser usado sozinho assim.

    
por 30.09.2013 / 22:04
1

O operador == não existe no Bash. É -eq ao comparar números ou = ao comparar strings.

if [ 1 -eq 2 ]; then echo 'y'; fi
    
por 30.09.2013 / 17:43