使用getopts没有得到输入值

using getopts did not get the input value

我是运行下面的脚本,但是看起来$filename 或$srvname 没有得到输入值。 例如:./test.sh -n abcd.net 给出输出 echo 'Filename or node name must be defined.' 这意味着,$srvname 没有得到值 "abcd.net",请指教我做错了什么。 ?

    set -x  

usage () {  

    echo "usage: [=10=] -n <nodename>"  
    echo "usage: [=10=] -f <filename>"  
    echo "usage: [=10=] -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  

提前致谢

尝试做:

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

因为 -n-f 有参数而 -h 没有。