我正在编写以下脚本来解析一些选项:
#!/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
答案 0 :(得分:2)
while [[ $# > 1 ]]
应该是
while (($# >= 1))
您需要进行数字比较,而不是字符串比较。虽然在这种情况下,它没有任何区别,但如果您与2
进行比较,则会产生很大的不同,因为字符串10
小于字符串2
无论如何,如果您使用一个参数调用脚本,$#
将是一个。所以大于比较是不正确的。
最后,如果你真的有:
exit 1
echo "hola"
永远不会执行回声,因为exit
首先会发生。