2013-01-10 78 views
3

我有一個bash腳本需要一個可選參數,如下所示,我想對其進行優化,以便我可以用不同方式傳遞第一個參數(0,false表示)一個錯誤的值,所有其他的字符串來表示真,默認爲假),這是一個優雅的方式來編寫腳本?我想用正確的布爾表達式來使用if語句。處理可選參數的bash腳本

 
if [ -n "$1" ]; then 
    update_httpconf="$1"; 
fi 
if [ "$update_httpconf" = "true" ]; then 
    echo "hi"; 
fi 

回答

2

如果你成功了,這樣做的第一個參數--update-httpconf算作是真實的,什麼都算作是假的,這將是與其他unixey命令更加一致線公用事業。

這可能是一個很好的起點:

while [ $# -gt 0 ] 
do 
    case $1 in 
     '--update-httpconf') 
      update_httpconf=true 
      ;; 
     *) 
      echo "unrecognised arg $1"; exit 
      ;; 
    esac 
    shift 
done 
+0

我真的不能明白是怎麼回事。有人會關心解釋嗎? – TomCho

+0

它正在遍歷命令行參數。「$#」會計算剩餘命令行參數的數量;在循環結束時,我調用'shift',它拋棄列表前面的參數。在每個循環中,我們都匹配'$ 1',它是列表前面的命令行參數。如果'$ 1'是'--update-httpconf',那麼我們將變量'update_httpconf'設置爲'true'。 '*'模式對case語句來說是一個全面的方式,所以如果我們到達它,那就意味着遇到了一個無法識別的參數,所以我們可能會失敗並退出程序。 – hdgarrood

+0

好的一段代碼。非常感謝你的解釋。 – TomCho

0

使用case聲明:

case "$1" in 
    0|false|FALSE) do_something;; 
    *) do_something_else;; 
esac