2011-12-19 79 views
2

我正在寫一個接受參數的bash腳本。我正在使用getopts來實現它。getopts不工作 - bash

#!/bin/bash 

while getopts ":a" opt; do 
    case $opt in 
    a) 
     echo "-a was triggered!" >&2 
     ;; 
    \?) 
     echo "Invalid option: -$OPTARG" >&2 
     ;; 
    esac 
done 

但上面的代碼返回的是我這個錯誤。

'etOpts_test.sh: line 4: syntax error near unexpected token `in 
'etOpts_test.sh: line 4: ` case $opt in 

我使用的CentOS 5.5

回答

1

4行你可能想case "$opt" in(報價$opt)。否則,如果它包含元字符,它可能會失敗。

+0

我剛掃乾淨腳本主體和現在的工作。 – pahan 2011-12-29 05:19:58

3

它應該是一個,不:一個表示需要一個參數一個標誌,也質疑,因爲它作爲通配符符號標記不應該被引用。總體的代碼是(還展示了一個標誌-h沒有采取參數):

function usage { 
    echo "usage: ..." 
} 

a_arg= 
while getopts a:h opt; do 
    case $opt in 
    a) 
     a_arg=$OPTARG 
     ;; 
    h) 
     usage && exit 0 
     ;; 
    ?) 
     usage && exit 2 
     ;; 
    esac 
done 
+0

我相信你是對的。但:工作我不知道爲什麼。我剛剛清理了腳本主體,現在它可以工作。 – pahan 2011-12-29 05:18:19

+0

pahan - 是$ OPTARG也正確填充「:a」? – bobah 2012-01-01 12:30:52