Caso anidado en el guión bash
Pregunta
He escrito la siguiente función en un script bash pero no funciona. ¿Me estoy perdiendo algo obvio?
main_menu() {
dialog \
--title "Sim Gateway Infomation Utility" \
--menu "What do you want to do?" 12 60 5 \
Summary "View overall summary" \
Details "View details of a sim bank" \
Modify "Modify used minutes of a sim" \
Exit "Exit" \
2>$tempfile
retval=$?
case retval in
0)
choice=`cat $tempfile`
case $choice in
Summary) summary;;
Details) details;;
Modify) modify;;
Exit) clean_up;;
esac
;;
1)
confirm_exit;;
255)
confirm_exit;;
esac
}
Solución
Este artículo discusiones dialog
; No tengo experiencia con eso.
Su 'case retval in
' necesita ser 'case $retval in
(o 'case "$retval" in
).
[@Idelic señala que mi respuesta original era más conservadora que necesaria.]
La cadena 'Retval' coincide con ninguna de las opciones que enumera en su instrucción Outer Case (use una opción '*' para detectar lo inesperado). Las cotizaciones dobles evitan accidentes si $retval
siempre contenidos espacios; En general, es una buena idea usar citas dobles alrededor de la variable en case "$var" in
declaraciones (y la mayoría de los otros lugares también). En este caso particular, no importaría; El estado de salida siempre es un número. En el 'case "$choice" in
'Declaración, me sentiría más cómodo con las citas sobre la variable, pero es posible que esté a salvo (necesitaría leer más sobre dialog
para estar seguro de lo que hace y si alguna vez genera espacios, o nada ni siquiera).