以前は動作していたシェル スクリプトのセクションがありますが、現在は異なる結果が出ています。
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
メニュー機能:
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 : ";
}
関数getchar
:
getchar (){
stty raw
answer=`dd bs=1 count=1 2> /dev/null `
stty -raw
}
悪い選択関数:
badchoice () {
MSG="Invalid menu choice"
}
スクリプトを実行するとメニューが表示されます
<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 :
ユーザーが 5 を入力しましたが、画面には表示されず、Enter2 ~ 3 回押すと次のメッセージが表示されます。
Invalid menu choice.
どこで問題が発生しているのかわかりません。メニュー関数は正常に実行されますが、getchar()
関数とcase
ステートメントに入ると問題が発生します。
答え1
おそらく、記載されている通りには機能しなかったため、
answer=`dd bs=1 count=1 2> /dev/null `
コマンドを実行して のanswer
戻り値を設定するのではdd
なく、文字列 ( dd bs=1 count=1
) を変数 に割り当てますanswer
。
拡張性を持たせるための編集
answer=$(dd bs=1 count=1 2> /dev/null)
うまくいきました