2013-02-22 75 views
0

我寫了一個非常簡單的失敗語句。我仔細檢查了語法,但無法找到出錯的地方。有人可以讓我知道嗎?簡單的case語句在shell腳本中失敗

#!/bin/bash 

opt_type=0 


function opt_type 
{ 
     echo "Opt Porvisioning tool starting..." 

     echo -e "1. ABC \n2. DEF \n3. HIJ \n" 
     read opt_input 

     case $opt_input in 
     1|abc|ABC) 
       opt_type=1; 

     2|def|DEF)  
       opt_type=2; 

     3|hij|HIJ)  
       opt_type=3; 

     4|exit|Exit) echo "Exiting ..." 

     *) echo "Please enter a valid entry. Exiting!!" 

     esac 
} 

echo $opt_type 


./opt_type.sh: line 16: syntax error near unexpected token `)' 
./opt_type.sh: line 16: `  2|def|DEF) 
-bash-3.2$ 

我沒有看到任何這樣的符號(`)那麼爲什麼它抱怨?

+0

除了缺乏;;終結者,你期望「1」匹配'1 | abc | ABC)'?它不會。 – William 2013-02-22 18:42:55

+0

我力圖匹配「1」。但只是出於好奇,我想看看我是否可以通過使用反斜槓(轉義字符)或如果有任何其他方式來匹配「1.」? – itsh 2013-02-26 20:47:04

+0

只要'1. | abc | ABC)'應該這樣做,你不需要逃跑'。'因爲這個案例陳述並不特別。它不是一個正則表達式,它使用文件元字符。順便說一句,如果你的數據看起來像「AbC」,你可以用:1. | [aA] [bB] [cC])(醜陋,但對於短字符串至少有效)。 – William 2013-02-26 22:18:49

回答

1

必須通過;;;關閉每個案件=)

所以:

#!/bin/bash 

opt_type=0 


function opt_type 
{ 
     echo "Opt Porvisioning tool starting..." 

     echo -e "1. ABC \n2. DEF \n3. HIJ \n" 
     read opt_input 

     case $opt_input in 
     1|abc|ABC) 
       opt_type=1 
     ;; 
     2|def|DEF)  
       opt_type=2 
     ;; 
     3|hij|HIJ)  
       opt_type=3 
     ;; 
     4|exit|Exit) echo "Exiting ..." 
     ;; 
     *) echo "Please enter a valid entry. Exiting!!" 
     ;; 
     esac 
} 

echo $opt_type 
+0

感謝您立即回覆。這樣可行。 – itsh 2013-02-22 18:46:37

1

你應該加倍分號:

case $opt_input in 
    1|abc|ABC) 
     opt_type=1;; 
    2|def|DEF)  
     opt_type=2;; 
    3|hij|HIJ)  
     opt_type=3;; 
    4|exit|Exit) 
     echo "Exiting ...";; 
    *) 
     echo "Please enter a valid entry. Exiting!!";; 
esac 
+0

太遲了=) – 2013-02-22 18:40:34

0

在bash,你需要兩個分號每種情況下在後你的病例陳述。我也將這個case語句從函數中取出,因爲函數從來沒有被調用過。以下工作如預期

#!/bin/bash 
opt_type=0 
echo "Opt Porvisioning tool starting..." 
echo -e "1. ABC \n2. DEF \n3. HIJ \n" 
read opt_input 
case $opt_input in 
    1|abc|ABC) opt_type=1;; 
    2|def|DEF) opt_type=2;; 
    3|hij|HIJ) opt_type=3;; 
    4|exit|Exit) echo "Exiting ...";; 
    *) echo "Please enter a valid entry. Exiting!!";; 
esac 
echo $opt_type