バッシュスクリプトのネストされたケース
質問
次の関数を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
}
解決
これ 論文 議論します dialog
;私はそれを経験していません。
君の 'case retval in
「必要です」case $retval in
(また 'case "$retval" in
).
[@Idelicは、私の元の答えは必需品よりも保守的だったと指摘しています。]
文字列の「retval」は、外側のケースステートメントにリストしたオプションのいずれも一致しません(「*」オプションを使用して、予期しないことを検出します)。二重引用符は、事故を防ぎます $retval
これまでにスペースが含まれていました。一般に、変数の周りに二重引用符を使用することをお勧めします case "$var" in
ステートメント(および他のほとんどの場所)。この特定のケースでは、それは問題ではありません。出口ステータスは常に数字です。の中に 'case "$choice" in
'ステートメント、私は変数の周りの引用にもっと慣れているでしょう - しかし、あなたはまだ安全かもしれません(私はもっと読む必要があります dialog
それが何をしているのか、それが空間を生成するかどうかを確認するために - または何もしません)。
所属していません StackOverflow