这是我到目前为止所拥有的。我真的无法弄清楚如何从另一个函数调用Menu2。每当我尝试运行它时总是会出错。出于某种原因,从第一个菜单开始,我需要在实际退出之前键入两次“X”。还有一件事,在计算完成后,当我需要它返回菜单时,由于某种原因返回菜单2。
编辑如果我用“Menu2”替换cpick()中的“break”,它永远不会执行Menu2。它循环回到菜单。对不起,我得到的错误是因为我不确定如何调用函数中的函数。我正在尝试“Menu2()”而不是菜单。
编辑2 问题#1:“*****”只是为了隐藏我的名字:) 问题2:谢谢你的工作! 问题3:我真的不明白你的建议......:S 问题#4:我现在拥有它的方式似乎像我想要的那样工作所以我要改变它,它只是美学:P
我仍然无法弄清楚如何在计算完成后返回菜单。我无法在我的apick()中调用Menu功能。我想要它做的是在计算完成后返回菜单,而不是返回到Menu2。
#!/bin/sh
LOGO=" Shell Scripting - Created by *****"
cmenu="C) Calculation";
xmenu="X) Exit";
amenu="+) Add";
smenu="-) Substract";
badchoice () { MSG="Invalid Selection ... Please Try Again" ;}
cpick () { clear
read -p "Please enter an integer number or X to exit: " num1
clear
break
echo; }
apick () { clear
read -p "Please enter an integer number or X to exit: " num2
sum=$(($num1+$num2))
echo The sum of $num1 plus $num2 equals $sum
sleep 3;}
spick () { clear
read -p "Please enter an integer number or X to exit: " num2
diff=$(($num1-$num2))
echo The difference of $num1 minus $num2 equals $diff
sleep 3;}
xpick () { break;}
Menu() {
clear
echo `date`
echo
echo "\t" $LOGO
echo
echo "Please Select:"
echo
echo "\t" $cmenu
echo "\t" $xmenu
echo $MSG
echo Please choose a letter above then hit Enter;
}
Menu2() {
clear
echo `date`
echo
echo "Please Select:"
echo
echo "\t" $amenu
echo "\t" $smenu
echo "\t" $xmenu
echo $MSG
echo Please choose an option above then hit Enter;
}
while true
do
Menu
read answer
MSG=
case $answer in
c|C) cpick;;
x|X) break;;
*) badchoice;;
esac
done
while true
do
Menu2
read answer
MSG=
case $answer in
+) apick;;
-) spick;;
x|X) xpick;;
*) badchoice;;
esac
done
答案 0 :(得分:0)
问题#1:LOGO包含*
个字符。你应该添加双引号。例如:
X="*"
echo $X
echo "$X"
输出:
file1 file2 ...
*
问题#2:如果输入了case
,请先使用exit
x
。
问题#3:shell函数中定义的break
不会破坏这种情况。在break
明确输入case
。
问题#4。 echo "\t"
在linux中打印\t
。输入echo -e "\t"
以打印标签。
然后它会起作用......