Исправление скрипта оболочки

Исправление скрипта оболочки

У меня есть раздел скрипта оболочки, который раньше работал, но теперь он выдает другие результаты:

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)

работало отлично

Связанный контент