问题描述
#!/bin/bash
while getopts ':s:r:' c
do
case $c in
s) if [ "$OPTARG" -ge 0 ]; then
echo "value is $OPTARG"
else
echo "enter value greater than 0";;
r) echo "something";;
esac
done
还是应该从案例陈述中删除if块,并将其放在case while循环之后?
什么是良好做法?我可以参考任何文档吗?
解决方法
在getopts的while case语句中使用if阻塞是一种好习惯吗
主观:当然,为什么不呢?除非您缺少fi
。
我应该从case语句中删除if块,并将其放在case while循环之后吗?
主观:它将是首选。对我来说。
什么是好的做法?
我相信一种常见的方法是只在选项解析中设置变量,然后在解析选项后编写健全性检查。但这不是通用的方法,对于某些应用程序在解析选项时执行一些逻辑可能更可取。与往常一样,最终的答案是:“取决于”。
我可以参考任何文档吗?
Linux手册页和POSIX程序员手册。 man 1p getopts有一个很好的例子,展示了如何先设置标志,然后编写健全性检查。