Hi ,some time ago i did an interactive menu based on eval function for navigation , one of the post remind me it. I think it could be handy for others.
#!/usr/bin/ksh
keyRead ()
{
tput smso
echo "Enter option."
tput rmso
oldstty=$(stty -g)
stty -icanon -echo min 1 time 1
Answer=$(dd bs=1 count=1 2>/dev/null)
stty "${oldstty}"
}
menu1()
{
#set -x
clear
echo "MENU1"
echo "====="
echo "1-MENU11"
echo "2-MENU12"
echo "0-BACK"
keyRead
menu
}
menu11()
{
#set -x
clear
echo "MENU11"
echo "====="
echo "0-BACK"
keyRead
menu
}
menu12()
{
clear
echo "MENU12"
echo "====="
echo "0-BACK"
keyRead
menu
}
menu2()
{
clear
echo "MENU2"
echo "====="
echo "0-BACK"
keyRead
menu
}
menu3()
{
clear
echo "MENU3"
echo "====="
echo "1-MENU31"
echo "2-MENU32"
echo "0-BACK"
keyRead
menu
}
menu31()
{
clear
echo "MENU31"
echo "====="
echo "1-MENU311"
echo "0-BACK"
keyRead
menu
}
menu311()
{
clear
echo "MENU311"
echo "====="
echo "0-BACK"
keyRead
menu
}
menu312()
{
clear
echo "MENU312"
echo "====="
echo "0-BACK"
keyRead
menu
}
menuExit ()
{
sufix=$(echo ${sufix}|awk '{printf("%s",substr($0,1,length-1))}')
current="menu${sufix}"
Answer=""
eval ${current}
}
menu ()
{
if [ "${Answer}." = "." ]
then
clear
echo "MAIN MENU"
echo "=============="
echo "1-MENU1"
echo "2-MENU2"
echo "3-MENU3"
echo "0-BACK"
keyRead
fi
while true
do
case ${Answer} in
0) if [ "${current}." = "menu." ]
then
exit 0
else
menuExit
fi;;
*) sufix="${sufix}${Answer}"
current="menu${sufix}"
eval ${current} 2>/dev/null
if [ $? -ne 0 ]
then
menuExit
fi;;
esac
done
}
###################################################
# MAIN #
###################################################
Answer=""
oldstty=$(stty -g)
clear
current=menu
sufix=""
menu
exit 0
Regards.