bash getopts,为什么我的脚本没有解析额外的输入参数?

时间:2017-07-18 14:54:29

标签: bash shell input getopts

我正在尝试创建一个bash脚本,它读取一组可选的输入解析参数。我试图关注this example on GitHub.com

我尝试添加另一个整数参数来读取,我称之为x(或xxx-size)。我认为在stack-size循环中复制while行命令就足够了,但事实并非如此。

当我运行脚本时,系统将x参数作为顺序中的最后一个参数,并且不读取它。我无法理解发生了什么。

这是我的代码:

#!/bin/bash
#
# Example of how to parse short/long options with 'getopt'
#

OPTS=`getopt -o vhnxs: --long verbose,dry-run,help,xxx-size,stack-size: -n 'parse-options' -- "$@"`

if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi

echo "$OPTS"
eval set -- "$OPTS"

VERBOSE=false
HELP=false
DRY_RUN=false
STACK_SIZE=0
XXX=-1

printf "\n1st parameter: "$1"\n"
printf "2nd parameter: "$2"\n"
printf "3rd parameter: "$3"\n"
printf "4th parameter: "$4"\n"
printf "5th parameter: "$5"\n\n"

while true; do
  case "$1" in
    -v | --verbose ) VERBOSE=true; shift ;;
    -h | --help )    HELP=true; shift ;;
    -n | --dry-run ) DRY_RUN=true; shift ;;
    -x | --xxx-size ) XXX="$2"; shift; shift ;;
    -s | --stack-size ) STACK_SIZE="$2"; shift; shift ;;
    -- ) shift; break ;;
    * ) break ;;
  esac
done

echo VERBOSE=$VERBOSE
echo HELP=$HELP
echo DRY_RUN=$DRY_RUN
printf "STACK_SIZE "$STACK_SIZE"\n"
printf "XXX "$XXX"\n"
printf "\n\n"

如果我尝试将s参数设置为100并将x参数设置为65,会发生以下情况: $ ./script.sh -s 100 -x 65

标准输出:

 -s '100' -x -- '65'

1st parameter: -s
2nd parameter: 100
3rd parameter: -x
4th parameter: --
5th parameter: 65

VERBOSE=false
HELP=false
DRY_RUN=false
STACK_SIZE 100
XXX --

如您所见,正如我所希望的那样,该程序不会将值65与XXX相关联。我该如何解决这个问题?

谢谢!

0 个答案:

没有答案