Aqui está uma versão corrigida da seção if / then / elif / fi do seu script:
if [ "$ANSWER" == "S" ]
then
ANSWER='set grid'
else
ANSWER=""
fi
echo "you want the plot with boxes, with lines, or with points?"
read HOW
if [ "$HOW" == "boxes" ]
then
P=boxes
elif [ "$HOW" == "lines" ]
then
P=lines
elif [ "$HOW" == "points" ]
then
P=points
fi
Observe a falta de espaço após o = ao definir ANSWER e P e o uso de elif em vez de else if . Eu também adicionei um espaço entre [ e as variáveis que estão sendo testadas [boxes ou [S não é o mesmo que [ boxes ou [ S . O primeiro tenta executar, por exemplo, o comando [boxes , enquanto o segundo executa [ com um argumento de boxes .
Eu também coloquei aspas em ANSWER='set grid' , sem elas ele irá definir ANSWER=set e então tentar executar um comando chamado grid . Tecnicamente, deve haver cotações nas linhas P= também, mas com apenas uma palavra (sem espaços) após o = , não precisa delas.
Pessoalmente, colocaria o then s nas mesmas linhas que o if e elif , porque eu acho que ele fica muito mais legível, mas isso não importa - é apenas uma preferência de estilo, o código funciona da mesma maneira.
if [ "$HOW" == "boxes" ] ; then
P=boxes
elif [ "$HOW" == "lines" ] ; then
P=lines
elif [ "$HOW" == "points" ] ; then
P=points
fi