Eu tenho uma seção de script de shell que estava funcionando anteriormente, mas agora está dando alguns resultados diferentes:
MSG=
while true
do
themenu
getchar =
case $answer in
1) export_Config_tables;;
2) export_config_tables_file;;
3) export_Accounts_tables;;
4) export_both_tables;;
5) load_config_tables;;
6) load_config_tables_file;;
x|X) break;;
q|Q) break;;
d|D) toggle_debug;;
*) badchoice;;
esac
done
clear
a função do menu:
themenu () {
clear
echo `date `
echo
echo " summit Data Extract utility (SOPRA v1.1)"
echo
echo
echo "1. Extract summit configuration data only"
echo "2. Extract summit config data in flat files only"
echo "3. Extract summit account data only"
echo "4. Extract all data "
echo "5. Load summit configuration data from Dump"
echo "6. Load summit config data from flat files only"
echo
echo
echo "x. Exit"
echo
echo $MSG
echo
echo "Select option : ";
}
a getchar
função:
getchar (){
stty raw
answer=`dd bs=1 count=1 2> /dev/null `
stty -raw
}
a função de má escolha:
badchoice () {
MSG="Invalid menu choice"
}
Após executar o script, ele exibe o menu
<System date>
summit Data Extract utility (SOPRA v1.1)
1. Extract summit configuration data only
2. Extract summit config data in flat files only
3. Extract summit account data only
4. Extract all data
5. Load summit configuration data from Dump
6. Load summit config data from flat files only
x. Exit
Select option :
O usuário insere 5, mas não é exibido na tela e após pressionar Enter2 a 3 vezes, exibe a mensagem:
Invalid menu choice.
Não consigo descobrir onde isso está causando o problema. A função do menu funciona bem, causa problemas ao entrar na getchar()
função e na case
instrução.
Responder1
Não funcionou para mim como está escrito, provavelmente porque
answer=`dd bs=1 count=1 2> /dev/null `
não executa o comando e define answer
o valor de retorno de, dd
mas atribui a string ( dd bs=1 count=1
) à variável answer
.
Editando para dar a expansão
answer=$(dd bs=1 count=1 2> /dev/null)
funcionou bem