O problema é que sua instrução case
está faltando o assunto - a variável que deve ser avaliada. Daí você provavelmente quer algo assim:
#!/bin/bash
cat <<EOD
choose one of the following options:
1) display all current users
2) list all files
3) show calendar
4) exit script
EOD
while true; do
printf "your choice: "
read
case $REPLY in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
done
Aqui case
usa a variável padrão $REPLY
, que read
preenche quando não é fornecido nenhum nome de variável (consulte help read
para obter detalhes).
Observe também as alterações: printf
é usado para exibir o prompt em cada rodada (e não acrescenta uma nova linha), cat
é usado para imprimir instruções em várias linhas para que elas não sejam agrupadas e sejam mais fácil de ler.