Shell:带有两个参数的getopts选项会停止脚本

时间:2014-05-25 10:26:30

标签: bash shell sh getopt

我制作了一个名为test.sh的脚本,如下所示

while getopts a:b: opt
do
  case $opt in
    a) a1=$OPTARG
       ;;
    b) b1=$OPTARG    
       eval "b2=\${$OPTIND}"
       shift 2;;   

  esac
done

echo $a1;
echo $b1;
echo $b2;

当我尝试下面的命令时,它的工作......

test.sh -a 111 -b 222 333

111
222
333

但如果我尝试这个......

test.sh -b 222 333 -a 111 

222
333

它只能显示-b参数,-a选项和agrument在-b选项之后无效...

我脚本上的任何问题???? 谢谢你:))

1 个答案:

答案 0 :(得分:1)

使用shift 2修改参数索引不会与getopts一起使用。相反,您应该将OPTIND增加1以使getopts跳过下一个参数,例如

while getopts a:b: opt
do
        case $opt in
                a) a1=$OPTARG
                        ;;
                b) b1=$OPTARG    
                        eval "b2=\${$OPTIND}"
                        OPTIND=`echo $OPTIND + 1 | bc`
                        ;;
        esac
done

echo $a1;
echo $b1;
echo $b2;