Você precisa de espaços em torno do == . Caso contrário, você passará a string "$choice"==1 para if em vez de comparar $choice para 1 . Quando [ recebe uma string, ela será avaliada como verdadeira enquanto a string não estiver vazia:
$ foo="bar"; [ $foo ] && echo true
true
$ foo=""; [ "$foo" ] && echo true ## echoes nothing
Fora dos colchetes test , na ausência de espaço, a variável seria atribuída a =1 . Para ilustrar:
$ f==3
$ echo $f
=3
$ [ 10==12 ] && echo yes
yes
Como você pode ver acima, f==3 define a variável $f to =3 .
Portanto, no bloco if , o que está sendo testado é uma cadeia não vazia que sempre é avaliada como true e a if é executada. Isso funcionaria:
if [ "$choice" == "1" ]
then
baseinstall
fi
Além disso, = ou == comparação de string no bash. Você quer comparação aritmética:
if [ "$choice" -eq "1" ]
then
baseinstall
fi