Linux getopts中的顺序参数
我必须写非常简单的脚本。它应该需要2个args-h和-q。两者都是可选的,-h可以在某个地方。所以,-h-q应该做与-q-h相同的动作。如果我通过了-a,或者-a-a-a-应该会发生错误(我的意思是退出1)。如果我通过-a-h-a-a-b…-它应该返回“我无法识别-a”+调用帮助案例。So-h具有优先权。 你能帮我吗Linux getopts中的顺序参数,linux,bash,shell,Linux,Bash,Shell,我必须写非常简单的脚本。它应该需要2个args-h和-q。两者都是可选的,-h可以在某个地方。所以,-h-q应该做与-q-h相同的动作。如果我通过了-a,或者-a-a-a-应该会发生错误(我的意思是退出1)。如果我通过-a-h-a-a-b…-它应该返回“我无法识别-a”+调用帮助案例。So-h具有优先权。 你能帮我吗 while getopts "hq" OPTION do case $OPTION in h) echo "Help here!&quo
while getopts "hq" OPTION
do
case $OPTION in
h)
echo "Help here!" ;
exit 0;
esac
done
shift $(($OPTIND - 1))
while getopts "hq" OPTION
do
case $OPTION in
q) #quiet - return 0, do nothing.
exit 0;;
*) #If -a or sth
echo "I couldn't recognize args"
echo "Help here"
exit 1
;;
esac
done
这是正确的实现:
#!/usr/bin/env bash
while getopts :hq OPTION
do
case $OPTION in
h) echo "Help here!" ;
exit 0;;
q) echo "quiet do nothing."
exit 0;;
?) echo "I couldn't recognize option [$1]"
exit 1;;
esac
done
shift $((OPTIND - 1))
注意
:hq
和?)
要处理不正确的选项(-a-b…您需要使用一个,而getopts
循环处理所有选项,而不是一个用于-h
然后一个用于-q
。我发现这个技巧在堆栈上有两个循环。堆栈上的哪个位置?它可能应该被更正,因为它将无法正常工作(除非有一些奇怪的情况是有意义的)。请看一下您可以解释的问题:,而getopts
将循环传递给脚本的每个选项。。。