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
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 ';'
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
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.
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.
O operador == não existe no Bash. É -eq ao comparar números ou = ao comparar strings.
if [ 1 -eq 2 ]; then echo 'y'; fi
Tags command-line