2013-04-16 75 views
0

這是我迄今爲止所做的。我真的不知道如何從另一個函數調用Menu2。每當我嘗試運行它時,我總會遇到錯誤。另外由於第一個菜單的某些原因,我需要在實際退出之前輸入「X」兩次。還有一件事,在計算完成後,由於某種原因返回菜單2,當我需要它返回菜單時。嘗試創建一個帶有2個菜單的shell腳本來執行添加和刪除操作

在此先感謝您的幫助!

編輯如果我用「Menu2」替換cpick()中的「break」,它永遠不會執行Menu2。它循環回菜單。對不起,我得到的錯誤是因爲我不確定如何調用函數中的函數。我正在嘗試「菜單2()」,而不是菜單。

EDIT 2問題#1: 「*」 只是隱藏我的名字:) 問題#2:工作謝謝! 問題3:我真的不明白你在暗示什麼...... S 問題4:我現在擁有的方式似乎像我想要的那樣工作,所以我要改變它,它的只是美學:P

我仍然不知道如何返回到菜單計算完成後。我無法調用我的apick()中的菜單功能。我希望它做的是在計算完成後返回菜單,而不是返回到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 
+1

您需要輸入兩次x,因爲從第一第一齣口,而從第二while循環迴路,第二個退出。功能中斷不會退出。你能指定你得到什麼錯誤信息嗎? – TrueY

回答

0

問題1:LOGO包含一個*字符。你應該添加雙引號。例如:

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

輸出:

file1 file2 ... 
* 

問題#2:在第一case如果使用輸入xexit

問題#3:break在shell函數中定義的不會破的情況。在case中明確輸入break

問題#4。 echo "\t"在linux中打印\t。輸入echo -e "\t"打印一個選項卡。

然後,它會工作...

相關問題