Tengo una sección del script de shell que funcionaba antes pero ahora da 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
la función del menú:
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 : ";
}
la getchar
función:
getchar (){
stty raw
answer=`dd bs=1 count=1 2> /dev/null `
stty -raw
}
la función de mala elección:
badchoice () {
MSG="Invalid menu choice"
}
Después de ejecutar el script, muestra el menú.
<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 :
El usuario ingresa 5, pero no aparece en la pantalla y después de presionar Enter2 o 3 veces, muestra el mensaje:
Invalid menu choice.
No puedo entender dónde está causando el problema. La función del menú se ejecuta bien, causa problemas cuando ingresa getchar()
a la función y a la case
declaración.
Respuesta1
No funcionó para mí tal como está escrito, presumiblemente porque
answer=`dd bs=1 count=1 2> /dev/null `
no ejecuta el comando y lo establece answer
en el valor de retorno de dd
sino que asigna la cadena ( dd bs=1 count=1
) a la variable answer
.
Editando para dar la expansión.
answer=$(dd bs=1 count=1 2> /dev/null)
funcionó bien