cas emboîtés dans le script bash
Question
Je l'ai écrit la fonction suivante dans un script bash, mais il ne fonctionne pas. Est-ce que je manque quelque chose évidente?
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
}
La solution
discute dialog
; Je ne suis pas connu avec elle.
Votre 'case retval in
' doit être 'case $retval in
(ou' case "$retval" in
).
[ @Idelic note que ma réponse initiale était plus conservateur que necesssary. ]
La chaîne « retval » correspond à aucune des options que vous indiquez dans votre déclaration externe (utilisez une option « * » pour détecter l'inattendu). Les guillemets doubles prévenir les accidents si jamais $retval
contenait des espaces; en général, il est une bonne idée d'utiliser des guillemets doubles autour de la variable dans les états de case "$var" in
(et la plupart des autres endroits aussi). Dans ce cas particulier, il ne serait pas question; l'état de sortie est toujours un nombre. Dans la déclaration de « case "$choice" in
», je serais plus à l'aise avec les guillemets autour de la variable - mais vous pouvez toujours être sûr (je dois en savoir plus sur dialog
pour être sûr de ce qu'il fait et si elle génère toujours des espaces - ou rien même).