2016-12-06 96 views
1

我解析命令行選項典型的設置是:測試是否有一個參數

CONF="" 
INPUT="" 
while getopts ":c:i:" FLAG; do 
    case $FLAG in 
     i) INPUT=$OPTARG;; 
     c) CONF=$OPTARG;; 
     \?) echo -e "\nInvalid option: -$OPTARG" 
     usage;; 
     :) echo -e "Option -$OPTARG requires an argument." 
     usage;; 
    esac 
done 
if [ "$#" -eq 0 ]; then 
    usage 
fi 

我正在尋找一種方式,提供了一種有效的標誌時趕上,但沒有理由是 - 例如:

./Script.sh -c -i 

返回usage。我的印象是,這條線下:

:) echo -e "Option -$OPTARG requires an argument." 

運行該腳本如上使用標誌不帶參數時,這樣處理然而,使用功能不點火,也不是回聲。

我在做什麼錯?

回答

1

如果您有任何./script.sh -c -i -c./script.sh -c調用腳本,都將顯示錯誤消息Option -c requires an argument.

然而,調用./script.sh -c -i時,您傳遞價值「-i」爲-c參數,所以,在結束的論點解析,你最終與CONF=-cINPUT not set

+0

啊是的 - 當然。我猜這可能不容易嗎? – AnnaSchumann

+0

您可以通過檢查OPTARG *與另一個現有標誌匹配來解決該問題,但我擔心'getopts'本身不提供此功能。 – bagage

相關問題