[
é apenas outro caractere, de acordo com bash; não é auto-delimitado. Então você precisa colocar espaços em torno de [
e ]
. Embora seja melhor usar [[
e ]]
.
E o comando seguinte if
(sim, [
é um comando) deve ser terminado com um ;
ou uma nova linha.
Finalmente, ==
(que não é posix, FWIW; posix prefere =
) é igualdade de string, não igualdade numérica.
Então você pode ter querido dizer:
if [[ $a -eq 1 ]]; then echo yes; fi
Mas você poderia usar a avaliação aritmética:
if ((a == 1)); then echo yes; fi
(Na avaliação aritmética, a igualdade é ==
e você não precisa de $
antes dos nomes das variáveis. Eu sei que é confuso.)
Para mais informações sobre [
: help test
. Sobre [[
: help [[
(que se baseia em test
). Sobre ((
: help let
. Sobre bash
: man bash