Corrigindo um script de shell

Corrigindo um script de shell

Eu tenho uma seção de script de shell que estava funcionando anteriormente, mas agora está dando alguns resultados diferentes:

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

a função do menu:

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 : ";
 }

a getcharfunção:

getchar (){
        stty raw
    answer=`dd bs=1 count=1 2> /dev/null `
    stty -raw
}   

a função de má escolha:

badchoice () {
 MSG="Invalid menu choice"
}

Após executar o script, ele exibe o menu

<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 : 

O usuário insere 5, mas não é exibido na tela e após pressionar Enter2 a 3 vezes, exibe a mensagem:

Invalid menu choice.

Não consigo descobrir onde isso está causando o problema. A função do menu funciona bem, causa problemas ao entrar na getchar()função e na caseinstrução.

Responder1

Não funcionou para mim como está escrito, provavelmente porque

answer=`dd bs=1 count=1 2> /dev/null `

não executa o comando e define answero valor de retorno de, ddmas atribui a string ( dd bs=1 count=1) à variável answer.

Editando para dar a expansão

answer=$(dd bs=1 count=1 2> /dev/null)

funcionou bem

informação relacionada