Linux 正在尝试创建一个shell脚本,其中包含两个菜单,用于执行加法和减法

Linux 正在尝试创建一个shell脚本,其中包含两个菜单,用于执行加法和减法,linux,shell,ubuntu,menu,Linux,Shell,Ubuntu,Menu,这就是我目前所拥有的。我真的不知道如何从另一个函数调用Menu2。每当我试图运行它时,总是会出错。出于某种原因,在第一个菜单中,我需要在它真正退出之前键入“X”两次。还有一件事,在计算完成后,由于某种原因,当我需要它返回菜单时,它会返回菜单2 编辑如果我将cpick()中的“break”替换为“Menu2”,它将不会执行Menu2。它循环回到菜单。抱歉,我收到的错误是因为我不确定如何在函数中调用函数。我试着用“Menu2()”代替菜单 编辑2问题1:“******”只是为了隐藏我的名字:) 问题

这就是我目前所拥有的。我真的不知道如何从另一个函数调用Menu2。每当我试图运行它时,总是会出错。出于某种原因,在第一个菜单中,我需要在它真正退出之前键入“X”两次。还有一件事,在计算完成后,由于某种原因,当我需要它返回菜单时,它会返回菜单2

编辑如果我将cpick()中的“break”替换为“Menu2”,它将不会执行Menu2。它循环回到菜单。抱歉,我收到的错误是因为我不确定如何在函数中调用函数。我试着用“Menu2()”代替菜单

编辑2问题1:“******”只是为了隐藏我的名字:) 问题2:谢谢你,这很有效! 问题3:我真的不明白你的建议s 问题#4:我目前的工作方式似乎和我想要的一样,所以我要改变它,它只是美学:P

我仍然不知道在计算完成后如何返回菜单。我无法在我的apick()中调用菜单函数。我希望它在计算完成后返回菜单,而不是返回菜单2

#!/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 
问题#1:徽标包含
*
字符。你应该在周围加上双引号。例如:

X="*"
echo $X
echo "$X"
输出:

file1 file2 ...
*
问题2:在第一种
情况下
如果输入了
x
则使用
退出

问题#3:
break
在shell函数中定义的将不会中断案例。在
case
中明确输入
break

问题四<代码>回显“\t”在linux中打印
\t
。输入
echo-e“\t”
打印选项卡


然后它将工作…

您需要键入x两次,因为第一个退出第一个while循环,第二个退出第二个while循环。函数中的中断将不会退出。您能指定您收到的错误消息吗?