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 getchar
Funktion:
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 case
Anweisung 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 answer
den Rückgabewert von , dd
sondern weist dd bs=1 count=1
der Variablen den String ( ) zu answer
.
Bearbeiten, um die Erweiterung zu geben
answer=$(dd bs=1 count=1 2> /dev/null)
hat gut geklappt