O primeiro passo sempre que você está depurando alguma coisa é fazer com que seu script imprima as diversas variáveis que está usando. Por exemplo, aqui, se você adicionar uma echo $choice
antes da declaração case
, verá que ela imprimirá 0
, independentemente do valor atribuído.
Isso porque você está usando a opção -i
para declare
, que faz (de help declare
):
-i to make NAMEs have the 'integer' attribute
Então, você está declarando que a variável é um inteiro e então está passando letras (strings) e como o bash está esperando um inteiro, ele converte para 0.
A próxima questão é que você está executando um loop while
que só sairá quando $choice
for 5
. Mesmo se o resto da sua sintaxe estivesse correta, isso só aconteceria na escolha e
.
Aqui está um exemplo prático do seu script. Eu removi o declare
que é desnecessário.
#!/bin/bash
## Use another variable to exit the loop
ok=0;
while ((ok==0))
do
echo "Main Menu:"
echo -e "\t(a) Add a contact"
echo -e "\t(b) Remove a contact"
echo -e "\t(c) Seach contacts"
echo -e "\t(d) Display contacts"
echo -e "\t(e) Exit"
echo -n "Please enter your choice:"
read choice
case $choice in
"a"|"A")
ok=1
;;
"b"|"B")
ok=1
;;
"c"|"C")
ok=1
;;
"d"|"D")
ok=1
;;
"e"|"E")
exit
;;
*)
echo "invalid answer, please try again"
;;
esac
done
echo "You entered $choice"