Domanda

Ho scritto la seguente funzione in uno script bash, ma non funziona. Mi sto perdendo qualcosa di ovvio?

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

}

È stato utile?

Soluzione

articolo discute dialog; Non sto sperimentato con esso.

Il tuo 'case retval in' ha bisogno di essere 'case $retval in (o' case "$retval" in).

[ @Idelic osserva che la mia risposta originale era più conservatore di necesssary. ]

La stringa 'retval' corrisponde nessuna delle opzioni che la lista nel tuo caso dichiarazione esterno (utilizzare l'opzione '*' per rilevare l'imprevisto). Le doppie virgolette prevenire gli incidenti se $retval spazi sempre contenuta; in generale, è una buona idea di usare le virgolette attorno alla variabile nelle dichiarazioni case "$var" in (e la maggior parte in altri luoghi troppo). In questo caso particolare, non avrebbe importanza; lo stato di uscita è sempre un numero. Nella dichiarazione 'case "$choice" in', sarei più a suo agio con le virgolette attorno alla variabile - ma si può ancora essere al sicuro (che avevo bisogno di saperne di più su dialog per essere sicuri di ciò che fa e se mai genera spazi - o niente addirittura).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top