سؤال

لقد كتبت الوظيفة التالية في برنامج نصي باش ولكنها لا تعمل. هل أفتقد شيئا واضحا؟

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

}

هل كانت مفيدة؟

المحلول

هذه شرط يناقش dialog; ؛ أنا لا أختبر معها.

لك 'case retval in' يجب أن يكون 'case $retval in (أو 'case "$retval" in).

[تلاشد الردا على أن إجابتي الأصلية كانت أكثر تحفظا من الضروري.]

لا تطابق سلسلة "Retval" أي من الخيارات التي تقوم بها في عبارة الحالة الخارجية (استخدم خيار "*" للكشف عن غير متوقع). يقتبس مزدوج منع الحوادث إذا $retval من أي وقت مضى المساحات؛ بشكل عام، من الجيد استخدام علامات اقتباس مزدوجة حول المتغير في case "$var" in البيانات (ومعظم الأماكن الأخرى أيضا). في هذه الحالة بالذات، لن يهم؛ حالة الخروج هي دائما رقم. في ال 'case "$choice" inبيان، سأكون أكثر راحة مع اقتباسات حول المتغير - ولكن قد لا تزال آمنة (سأحتاج إلى قراءة المزيد عن dialog للتأكد من ما يفعله وما إذا كان بإنشاء مسافات - أو لا شيء حتى).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top