以前は動作していたシェルスクリプトがありますが、今はいくつかの異なる結果を提供します。
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)
非常にうまく動作