getopts 没有提供参数
Posted
技术标签:
【中文标题】getopts 没有提供参数【英文标题】:getopts no argument provided 【发布时间】:2013-05-03 11:55:54 【问题描述】:如何检查是否没有提供必需的参数?我发现 switch case 中的 ":" 选项应该足以达到这个目的,但它永远不会进入那个 case(代码块)。我是否将“冒号”放在开头或其他地方都没有关系。
我的代码:
while getopts :a:b: OPTION;
do
case "$OPTION" in
a)
var1=$OPTARG
;;
b)
var2=$OPTARG
;;
?)
exitScript "`echo "Invalid option $OPTARG"`" "5"
;;
:)
exitScript "`echo "Option -$OPTARG requires an argument."`" "5"
;;
*)
exitScript "`echo "Option $OPTARG unrecognized."`" "5"
;;
esac
done
提前 THX。
【问题讨论】:
首先,尽量提供最小的工作示例:你的不是因为exitScript
函数。
【参考方案1】:
case
块中的?)
应写为"?")
。
【讨论】:
+1 澄清一下,case
选择器中未加引号的 ?
是一个全局模式,它匹配任何单个字符 - :
的值在此处被截获,并且永远不会到达条款意味着它。【参考方案2】:
您必须转义?
。下一个罐头(部分)有效。
err() 1>&2 echo "$0: error $@"; return 1;
while getopts ":a:b:" opt;
do
case $opt in
a) aarg="$OPTARG" ;;
b) barg="$OPTARG" ;;
:) err "Option -$OPTARG requires an argument." || exit 1 ;;
\?) err "Invalid option: -$OPTARG" || exit 1 ;;
esac
done
shift $((OPTIND-1))
echo "arg for a :$aarg:"
echo "arg for b :$barg:"
echo "unused parameters:$@:"
部分是因为什么时候会调用上面的脚本
$ bash script -a a_arg -b b_arg extra
会如你所愿,
arg for a :a_arg:
arg for b :b_arg:
unused parameters:extra:
但是当你将它称为
bash script -a -b b_arg
将打印
arg for a :-b:
arg for b ::
unused parameters:b_arg:
什么不是,你想要什么。
还有UUOE。 (不能使用回声)。
【讨论】:
以上是关于getopts 没有提供参数的主要内容,如果未能解决你的问题,请参考以下文章