bash getopts,为什么我的脚本没有解析额外的输入参数?
我试图创建一个bash脚本,它读取一组可选的输入解析参数。我试着跟着 我试图添加另一个整数参数来读取,我称之为bash getopts,为什么我的脚本没有解析额外的输入参数?,bash,shell,input,getopts,Bash,Shell,Input,Getopts,我试图创建一个bash脚本,它读取一组可选的输入解析参数。我试着跟着 我试图添加另一个整数参数来读取,我称之为x(或xxx size)。我认为在while循环中复制stack size行命令就足够了,但事实并非如此 当我运行脚本时,系统将x参数作为顺序中的最后一个参数,而不读取它。我不明白发生了什么事 这是我的密码: #!/bin/bash # # Example of how to parse short/long options with 'getopt' # OPTS=`getopt -
x
(或xxx size
)。我认为在while
循环中复制stack size
行命令就足够了,但事实并非如此
当我运行脚本时,系统将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-s100-x65
标准输出:
-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相关联。我怎样才能解决这个问题
谢谢 您通过了
-s'100'-x--'65'
,而不是-s'100'-x'65'
。因为-->
是第四个参数(以及-x之后的参数),它将-->
分配给XXX
。然后,它读取65作为下一个参数,不知道如何处理它,从而破坏case语句并输出变量。@LukasIsselbächer我没有将--
作为输入参数传递。我不知道剧本为什么这么想@Davicechico.it请删除评估集--“$OPTS”
然后它就会工作:)@LukasIsselbächer谢谢!如果你有时间把它重新写下来作为一个正确的答案,我可以把它标记为“接受答案”。