2013-05-07 66 views
1

我不擅長Bash腳本編寫,並試圖學習更多。讓我用代碼介紹我的問題:當選項存在時如何設置某些變量值

#!/bin/bash 
version_num= 
isWindows= 
MSVC_VER= 
VERBOSE= 
while getopts 「hw:v:m:V」 OPTION 
do 
    case $OPTION in 
     h) 
      usage 
      exit 1 
      ;; 
     w) 
      isWindows=$OPTARG 
      ;; 
     v) 
      version_num=$OPTARG 
      ;; 
     m) 
      MSVC_VER=$OPTARG 
      ;; 
     V) 
      VERBOSE=1 
      ;; 
     ?) 
      usage 
      exit 
      ;; 
    esac 
done 

對於空間,使用函數被刪除。

我的問題是:

第一個問題

目前,如果我使用這個劇本,我有每個選項後喂參數值,例如:

`bash test_bash.sh -v 4.2.2.0 -m 10.0 -w 1` 

然而,假設我只需要查看-w是否存在,然後設置一些變量值。我不想提供-w 1,因爲1只是一個標誌。我希望腳本能夠像這樣工作:

bash test_bash.sh -w -v 4.2.2.0 -m 10.0 

我該如何做到這一點?我想要做一些類似rm -r -f的事情,它可以有多個選項,並且不要求每個選項都有一些值。

第二個問題

如果我刪除

V) 
    VERBOSE=1 
    ;; 
while

:V以及VERBOSE=,這個腳本不工作了。是否因爲:V是必需的?

非常感謝您的時間和幫助!

回答

4

在參數getopts中的字母后面加上:,表示它是否在後面接受參數。因此,更改爲:

while getopts 「hwv:m:V」 OPTION 

Removeing :V從劇本打破它,因爲:是一個針對之前,而不是來自後V選項m選項。當您刪除:時,這意味着m不再需要參數,但您需要這個參數。

+0

非常感謝我的明確解釋,我學到了。 – taocp 2013-05-07 17:43:49

相關問題