如何检查是否没有提供必需的参数?我发现 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
提前谢谢。
你必须逃离?
。下一个可以(部分)工作。
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。 (无用回声的使用)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)