Quote:
Originally posted by Jimbo
Your main case statement should not try to process the replies from the sub-menus. That case statement, on a single execution, will process only a single response, and that will be a main menu response.
Each sub-menu, after painting the screen, needs to do its own read/case processing, then fall out the bottom or do a return. Follow your script and you will see that it is executing as coded: main loop calls Filefunctions, which paints the screen, calls PressEnter (no read has been done yet), then falls back to the main loop which starts the next main menu cycle.
You could code the main loop in such a way that its read/case processing would handle the responses from all main/sub menus. But this would not be a typical approach, and not as easy to maintain as the more modular approach.
Also, Deletedirectory and Changedirectory have if-statements that are not closed out.
These are the changes I made, are the case statements in the right place?? Still is not functioning, can u tell me nething else im doing wrong??
amenu () {
clear
echo "\t\t\tMy Personal Menu"
echo
echo "\t\tPlease Select:"
echo
echo "\t\t\t 1. Directory display"
echo "\t\t\t 2. File functions"
echo "\t\t\t 3. Directory functions"
echo
echo "\t\t\t 0. Exit"
echo Select by pressing a number and then ENTER ;
}
PressEnter () {
echo Press Enter
read x
}
DirectoryDisplay () {
ls -l|more
PressEnter
}
Filefunctions () {
clear
echo "\t\t\tFile functions Menu"
echo
echo "\t\tPlease Select:"
echo
echo "\t\t\t 5. Delete file"
echo
echo "\t\t\t 0. Return to main menu"
echo Select by pressing a number and then ENTER ;
PressEnter
}
Deletefile () {
print -n "Enter file name to be deleted: "
read name
if [ -f $name ]
then
rm $name
echo "file: $name has been deleted"
else
echo "this is not a file"
fi
PressEnter
}
read answer
case $answer in
5) Deletefile ;;
0) break ;;
esac
done
clear
Directoryfunctions () {
clear
echo "\t\t\tDirectory functions Menu"
echo
echo "\t\tPlease Select:"
echo
echo "\t\t\t 6. Delete directory"
echo "\t\t\t 7. Change directory"
echo
echo "\t\t\t 0. Return to main menu"
echo Select by pressing a number and then press ENTER ;
PressEnter
}
Deletedirectory () {
print -n "Enter directory name to be deleted: "
read name
if [ -d $name ]
then
echo "directory: $name has been deleted"
else
echo "this is not a directory"
PressEnter
fi
PressEnter
}
Changedirectory () {
print -n "Enter directory name to be deleted: "
read name
if [ -d $name ]
then
cd $name
else
echo "$name is not a directory"
fi
PressEnter
}
read answer
case $answer in
6) Deletedirectory ;;
7) Changedirectory ;;
0) break ;;
esac
done
clear
while true
do
amenu
read answer
case $answer in
1) DirectoryDisplay ;;
2) Filefunctions ;;
3) Directoryfunctions ;;
0) break ;;
esac
done
clear