使用getopts没有得到输入值

时间:2015-06-11 10:00:09

标签: bash while-loop getopts

我正在运行下面的脚本,但看起来$ filename或$ srvname没有得到输入值。 例如:./ test.sh -n abcd.net给出输出echo'必须定义文件名或节点名。' 这意味着,$ srvname没有得到值" abcd.net",请告诉我我做错了什么。 ?

    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 个答案:

答案 0 :(得分:1)

尝试做:

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

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