2012-11-16 28 views
0

我正在嘗試爲Mac OSX Mountain Lion編寫一個shell腳本(10.8.2)。但是,無論我嘗試什麼,我都無法使switch語句正常工作。他是一個非常簡化的腳本版本:Case語句不能在我的shell腳本中工作

#!/bin/bash 

while getopts "ei" opt; do 
    case $opt in 
    e) 
     echo "Got option e" 
     ;; 
    i) 
     echo "Got option i" 
     ;; 
    \?) 
     echo "Invalid option: -$opt" 
     ;; 
    esac 
done 

無論我嘗試什麼,我都沒有得到任何輸出。有任何想法嗎?過去我已經完成了這樣的腳本。

+0

上面的腳本適用於OS X 10.8.2上的我 - 你是如何調用它的? –

+0

在你的問題中包含一些示例輸入。祝你好運。 – shellter

回答

3

你可能會傳遞錯誤的選項不要忘記-

script.sh -e 

注意你也應該退出後無效選項:

\?) 
    echo "Invalid option: -$opt" 
    exit 1 
    ;; 
+0

我就是這樣一個白癡!我沒有忘記把短劃線放在命令行上。 – wholladay

0

嘗試更換

\?) 
    echo "Invalid option: -$opt" 
    ;; 

*) 
    echo "Invalid option: -$opt" 
    ;; 
+0

他們都工作正常。 – iabdalkader

+0

@mux我只用過'*)';兩者之間有差異嗎? –

+1

'?'意味着未知的選項,而'*'意味着任何選項,所以如果它是開關中的第一個,它可以捕捉任何選項(包括有效的選項),但是因爲它是這種情況下的最後一個,所以它起作用 – iabdalkader