حالة متداخلة في سيناريو باش
سؤال
لقد كتبت الوظيفة التالية في برنامج نصي باش ولكنها لا تعمل. هل أفتقد شيئا واضحا؟
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
للتأكد من ما يفعله وما إذا كان بإنشاء مسافات - أو لا شيء حتى).