2016-12-16 5 views
0

覚えておいてください。どのループがこの問題に適していますか?ケースのみから切り離して他のループを続ける方法

#!/bin/bash 
. /home/nayanc/project/info 
. /home/nayanc/project/servers 
#. /home/nayanc/project/cal 
echo -e "1.System Information \n2.Calculation \n3.Server Configuration \n4.Exit" 
read -p "Enter Your Choice " ch 
case $ch in 
1) 
     echo -e "a.Basic Information \nb.Intermedite Information \nc.All Information \nd.Exit from case \nExit from program" 
     read -p "Enter Your Choice" ch1 
     case $ch1 in 
     a) 
       basic 
       ;; 
     b) 
       inter 
       ;; 
     c) 
       myinfo1 
       ;; 
     esac 
     ;; 
2) 
     echo -e "a.Addition \nb.Subtraction \nc.multiplication \nd.Exit from case \ne.Exit from program" 
     read -p "Enter your Choice " ch2 
     case $ch2 in 
     a) 
       add_numbers 
       ;; 
     b) 
       sub_numbers 
       ;; 
     c) 
       mul_numbers 
       ;; 
     d) 
       echo "Exit from Loop" 
       break 1 
       ;; 
     e) 
       echo "Exit from program" 
       ;; 
     *) 
       echo "Please enter correct choice" 
       ;; 
     esac 
     ;; 
3) 
     ;; 
4) 
     exit 0 
     ;; 
*) 
     ;; 
esac 
+0

スクリプトを終了するための区切り文字が必要ですか?そのスクリプトがなければ終了できません – Inian

答えて

0

ブレークはfor、select、while、untilループでのみ使用されますが、そうでない場合にのみ使用されます。 しかし、あなたはちょっと混乱しているようです。 デフォルトでは、;;プログラムではなくケースを終了する。

問題は、どのように終了させるのかではなく、終了するまで実行を続ける方法です。

この例を参照してください、あなたは、B、CまたはDのいずれかを押した場合、ケース内の対応するコマンドが実行される

echo -e "a.Basic Information \nb.Intermedite Information \nc.All Information \nd.Exit from case \ne.Exit from program" 
read -p "Enter Your Choice" ch1 
case $ch1 in 
    a) echo "-->run basic information script";; 
    b) echo "-->run intermediate information script";; 
    c) echo "-->run allinformation script";; 
    d) echo "-->Exit from case";; 
    e) echo "-->Exit from program" 
     exit;; 
    *) echo "Wrong Selection - Try Again" 
esac 
echo "Command X: This is command X after the case" #Command inside program but out of case 

場合が終了すると、コマンドX外部ケースもために実行されますプログラムは終了しません。
eを押すと、ケース内のexitコマンドが実行され、プログラムが終了し、最後のコマンドX(ケース外)は実行されません。 A、B、Cを選択した場合の

出力、またはd

[email protected]:/home/gv/Desktop/PythonTests# ./bashtest.sh 
a.Basic Information 
b.Intermedite Information 
c.All Information 
d.Exit from case 
e.Exit from program 
Enter Your Choice : a 
-->run basic information script 
Command X : This is command X after the case 
[email protected]:/home/gv/Desktop/PythonTests# 

#If you select e, the last command X is not executed since program is terminated due to exit. 

あなたは(dを押す)あなたの選択まで生きケースを維持したいならば、あなたはケースの前にwhileループを使用することができます。上記の場合

while [ "$ch1" != "d" ];do 
    echo -e "a.Basic Information \nb.Intermedite Information \nc.All Information \nd.Exit from case \ne.Exit from program" 
    read -p "Enter Your Choice : " ch1 
    case $ch1 in 
     a) echo "-->run basic information script";; 
     b) echo "-->run intermediate information script";; 
     c) echo "-->run allinformation script";; 
     d) echo "-->Exit from case";; 
     e) echo "-->Exit from program" 
      exit;; 
     *) echo "Wrong Selection - Try Again" 
    esac 
done #if d or e are not pressed the menu will appear again 
echo "Command X: This is command X after the case" 

/組み合わせながら、あなたはabまたはc対応する場合のコマンドが実行されますを選択した場合、コマンドXは実行されませんし、ケースメニューが再ロードされます。

dを押すと、プログラムが終了しないため、コマンドXが実行されます。

eを押すと、ケースとプログラムはexitになり、プログラムが終了してからコマンドXは実行されません。

またしばらく&場合と同様である選択&場合、使用することができます:あなたは「ケースから終了」を押すと、ケースと選択が選択されます後に終了し、コマンドXされます再び

IFS=$'\n' #necessary since select by default separates option using space as a delimiter 
op=("Basic Information" "Intermedite Information" "All Information" "Exit from case" "Exit from program") #Use an array 
select ch1 in ${op[@]}; do 
echo "You choose $ch1" 
    case $ch1 in                  #or case $ch1 in 
      "Basic Information")  echo "-->run basic information script";;  #${op[0})....;; 
      "Intermedite Information") echo "-->run intermediate information script";; #${op[1})....;; 
      "All Information")   echo "-->run allinformation script";;   #${op[2})....;; 
      "Exit from case")   echo "-->Exit from case"      #${op[3})....;; 
             break;; 
      "Exit from program")  echo "-->Exit from program"      #${op[4})....;; 
             exit;; 
      *)       echo "Wrong Selection - Try Again" 
    esac                    #esac 
done 
echo "Command X: This is command X after the menu" 

をプログラムは終了していないので実行されます。

関連する問題