쉘 스크립트 수정

쉘 스크립트 수정

이전에 작동했던 쉘 스크립트 섹션이 있지만 지금은 몇 가지 다른 결과를 제공하고 있습니다.

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)

잘 됐어

관련 정보