0

我在 bash 脚本中编写了以下函数,但它不起作用。我错过了一些明显的东西吗?

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

}

4

1 回答 1

5

本文讨论;_ dialog我没有经验。

你的 ' case retval in' 需要是 ' case $retval in(或 ' case "$retval" in)。

[ @Idelic 注意到我最初的答案比必要的更为保守。]

字符串 'retval' 与您在外壳语句中列出的任何选项都不匹配(使用 '*' 选项来检测意外情况)。$retval如果包含空格,双引号可防止发生事故;case "$var" in一般来说,最好在语句中的变量周围使用双引号(以及大多数其他地方)。在这种特殊情况下,这无关紧要。退出状态始终是一个数字。在 ' case "$choice" in' 声明中,我对变量周围的引号感到更舒服 - 但你可能仍然是安全的(我需要阅读更多关于dialog它的作用以及它是否会生成空格 - 或者什么都没有甚至)。

于 2009-09-25T14:20:57.070 回答