2015-06-11 42 views
0

我正在運行下面的腳本,但它看起來像$文件名或$ srvname沒有得到輸入值。 說例如:./test.sh -n abcd.net給出輸出回顯'文件名或節點名稱必須定義'。 這意味着,$ srvname沒有得到值「abcd.net」,請告訴我做錯了什麼。 ?使用getopts沒有得到輸入值

set -x 

usage() { 

    echo "usage: $0 -n <nodename>" 
    echo "usage: $0 -f <filename>" 
    echo "usage: $0 -h <help>" 
} 



while getopts ":nfh:" opt; do 
    case "$opt" in 
     n) srvname="$OPTARG" ;;  
     f) filename="$OPTARG" ;; 
     h) # help 
      usage 
      exit 0 
      ;; 
     :) echo "Error: -$OPTARG requires an argument" 
      usage 
      exit 1 
      ;; 
     ?) echo "Error: unknown option -$OPTARG" 
      usage 
      exit 1 
      ;; 

    esac 
done  


function dosomecheck { 
    echo "do some checks" 

} 

if [ "$filename" != "" ] ; then 
    # read file 
    for x in `cat $filename` ; do 
     dosomecheck $x 
    done 
fi 

if [ "$srvname" != "" ] ; then 
    # read file 
    for x in $srvname ; do  
     dosomecheck $x 
    done 
fi 

在此先感謝

回答

1

嘗試這樣做:

while getopts ":n:f:h" opt; 

因爲-n-f發生爭吵,而-h沒有。

+0

雅我運行腳本與選項-h時出現錯誤。我是否還需要包含幫助選項以及$ OPTARG? 「錯誤:-h需要參數」 – user3834663

+0

@ user3834663如果您在h'h:'之後意外地使用了冒號,請檢查您的代碼,因爲這樣做會說使用'-h'的時候也需要一個參數。 –