Bash 如何解析无效选项?
我正在编写以下脚本来解析一些选项:Bash 如何解析无效选项?,bash,Bash,我正在编写以下脚本来解析一些选项: #!/bin/bash while [[ $# > 1 ]] do key="$1" case $key in -i|--inbound) inbound="true" shift # past argument ;; -o|--outbound) outbound="true" shift # past argument ;; *) echo "ho
#!/bin/bash
while [[ $# > 1 ]]
do
key="$1"
case $key in
-i|--inbound)
inbound="true"
shift # past argument
;;
-o|--outbound)
outbound="true"
shift # past argument
;;
*)
echo "hola"
exit 1
;;
esac
shift # past argument or value
done
echo $inbound
echo $outbound
问题是我想终止程序,如果收到无效选项,我尝试了以下操作:
*)
exit 1
echo "invalid option"
;;
但是,当我像这样运行程序时:bash script.sh-invalid,任何情况都会发生,我希望得到任何修复此问题的建议,我希望得到的输出如下:
invalid option
while[$#>1]
应该是
while (($# >= 1))
2
相比,它会产生很大的区别,因为字符串10
小于字符串2
$#
将是一个参数。因此,大于比较是不正确的 exit 1
echo "hola"
回显将永远不会执行,因为退出将首先发生。不是问题,而是
用于[
/[
中的字符串比较。您需要-gt
或($#>1))
。将设置-x
添加到脚本中(或运行bash-x script.sh…
)您应该看到您的逻辑至少有一个问题(以及为什么bash script.sh-invalid
没有做任何事情)很抱歉,当我把代码放在第一位是回显,然后是出口1时,这是一个错误,但什么也没有发生,我已经更改了问题中的代码。@安德尔克:是的,那也行。另一个简单的方法是对key do@rici使用,但它不允许您使用shift键,并且有接受另一个参数的选项。@user138717:有了这个吗编辑,你修复了错误的,但是正确的现在是错误的。