이전에는 작동했던 쉘 스크립트가 있지만 지금은 몇 가지 다른 결과를 제공합니다.
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)
아주 잘 작동