[ é 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