【发布时间】:2017-06-02 04:58:02
【问题描述】:
我有一个循环来解析命令行参数。如果 -d 或 -b 参数有参数,一切正常。但是当我在没有参数的情况下传递 -d 或 -b 时,脚本会进入无限循环。
# Parse command line input
while [ "$#" -gt 0 ]; do
case "$1" in
-d) DOMAIN="$2"; shift 2;;
-b) BITS="$2"; shift 2;;
*) die "unrecognized argument: $1"
esac
done
如何在空参数上抛出错误?
【问题讨论】:
-
如果您的参数只是单个字母,您可以使用
getopts而不是自己滚动。 -
一个可行的技巧,特别是如果你有一些标志选项(不带参数)是
shift而不是case中的shift 2,然后是另一个shiftesac和之前的done。标志选项根本不需要转变。因为它会一次移动一个参数,所以它会摆脱一个没有参数的流浪-b,因此循环将终止。也就是说,getopts答案是更好的长期选择。临时解决方案会遇到临时错误——见证你的无限循环问题。
标签: bash shell command-line command-line-arguments