これは私がこれまでに持っているものです。別の関数から Menu2 を呼び出す方法が本当にわかりません。実行しようとすると、常にエラーが発生します。また、最初のメニューの何らかの理由で、実際に終了する前に「X」を 2 回入力する必要があります。もう1つ、計算が完了した後、メニューに戻る必要があるときに、何らかの理由でメニュー2に戻ります。
編集 cpick() の「break」を「Menu2」に置き換えると、Menu2 は実行されません。メニューに戻ります。申し訳ありませんが、関数内で関数を呼び出す方法がわからなかったため、エラーが発生しました。メニューの代わりに「Menu2()」を試していました。
EDIT 2問題#1: 「*****」は私の名前を隠すためのものでした:) 問題#2: ありがとうございます。問題#3:あなたが提案していることを本当に理解していません... :S 問題#4:私が現在持っている方法は、私が望むように機能しているように見えるので、それを変更します。それは単なる美学です:P
計算が完了した後、メニューに戻る方法がまだわかりません。apick() で Menu 関数を呼び出すことができません。私がやりたいのは、Menu2に戻るのではなく、計算が完了したらMenuに戻ることです。
#!/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