【问题标题】:Trying to create a shell script with 2 menus to do additions and subtractions尝试创建一个带有 2 个菜单的 shell 脚本来做加法和减法
【发布时间】:2013-04-16 16:43:48
【问题描述】:

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

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

编辑 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 

【问题讨论】:

  • 您需要输入 x 两次,因为第一次退出第一个 while 循环,第二次退出第二个 while 循环。函数中的中断不会退出while。你能指定你得到什么错误信息吗?

标签: linux shell ubuntu menu


【解决方案1】:

问题#1:LOGO 包含* 字符。您应该在周围添加双引号。示例:

X="*"
echo $X
echo "$X"

输出:

file1 file2 ...
*

问题#2:如果输入了x,则在第一个case 中使用exit

问题#3:在 shell 函数中定义的break 不会破坏这种情况。在case 中明确输入break

问题#4。 echo "\t" 在 linux 中打印 \t。输入echo -e "\t" 打印标签。

然后它会工作......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多