Korrigieren eines Shell-Skripts

Korrigieren eines Shell-Skripts

Ich habe einen Abschnitt eines Shell-Skripts, der vorher funktioniert hat, jetzt aber andere Ergebnisse liefert:

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

die Menüfunktion:

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

die getcharFunktion:

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

die Funktion „Schlechte Wahl“:

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

Nach der Ausführung des Skripts wird das Menü angezeigt

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

Der Benutzer gibt 5 ein, aber diese wird nicht auf dem Bildschirm angezeigt. Nach Enter2- bis 3-maligem Drücken wird die folgende Meldung angezeigt:

Invalid menu choice.

Ich kann nicht herausfinden, wo das Problem liegt. Die Menüfunktion wird einwandfrei ausgeführt, es treten jedoch Probleme auf, wenn sie in getchar()die Funktion und die caseAnweisung eintritt.

Antwort1

Funktionierte bei mir nicht wie beschrieben, vermutlich weil

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

führt den Befehl nicht aus und setzt answerden Rückgabewert von , ddsondern weist dd bs=1 count=1der Variablen den String ( ) zu answer.

Bearbeiten, um die Erweiterung zu geben

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

hat gut geklappt

verwandte Informationen