0

これは私がこれまでに持っているものです。別の関数から 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 
4

1 に答える 1