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

}

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top