2013-06-26 52 views
0

的说法我有一个代码:连续两个选项,`getopts`服用第二个选项的第一个

while getopts ab:cde:f opt 
    do 
     case ${opt} in 
      b|e) 
       [[ ${OPTARG} = -* ]] && usage "Invalid parameter \"${OPTARG}\" provided for agurment \"-  ${opt}!\"" 
       [[ ${#OPTARG} -eq 0 ]] && usage "Argument \"-${opt}\" requires a parameter!${OPTARG}" 
      ;; 
     esac 

     case $opt in 
      a) minusa=$opt;; 
      b) minusb=$opt 
      file_b=$OPTARG;; 
      c) minusc=$opt;; 
      d) minusd=$opt;; 
      e) minuse=$opt 
      file_e=$OPTARG;; 
      f) minusf=$opt;; 
      /?) echo Unrecognized parameter 
      exit 1;; 
     esac 

    done 
    echo "minusa:$minusa","minusb:$minusb","file_b:$file_b","minusc:$minusc","minusd:$minusd","minuse:$minuse","file_e:$file_e","minusf:$minusf" 

简单的代码,只是为了了解getopts命令的行为。当我运行像脚本:

./eg2 -b -f 
    ./eg2: line 7: usage: command not found 
    minusa:,minusb:b,file_b:-f,minusc:,minusd:,minuse:,file_e:,minusf: 

它走的是论据选项-b-f。而我想打印:

 [[ ${OPTARG} = -* ]] && usage "Invalid parameter \"${OPTARG}\" provided for agurment \"-${opt}!\"" 

在代码中究竟哪里出错了?还在为选择-b-e如果没有争论,我想打印:

[[ ${#OPTARG} -eq 0 ]] && usage "Argument \"-${opt}\" requires a parameter!${OPTARG}" 

请解释。

回答

1

您已在getopts行中的“b”后面加上“:”。这告诉它在之后期待争论。如果您不希望将下一个参数看作-b的参数,请删除该“:”。

+0

你让我的查询出错了。我理解getopts的运作方式,但是在我的代码中,我想提出一个条件,如果某人放了'-b'选项并且没有它的参数给出下一个选项,我想通过将这个条件打印出错信息: ' [$ OPTARG} = - *]] &&用法“无效的参数\”$ {OPTARG} \“为agurment \” - $ {opt}!\“”'提供,而不是自动为参数先前的选项 –

0

[[ "${OPTARG}" =~ "^-[a-z]" ]] && echo "Invalid parameter \"${OPTARG}\" provided for agurment \"-${opt}!\""解决了这个问题......谢谢

相关问题