我的script.sh用法:
./work.sh [options] parm_1 parm_2 parm_3 parm_4
选项:
-y year
-n number
-1 (flag, no parameters)
-2 (flag, no parameters)
我想在-1和-2标志之间互斥,所以如果指定-1,则不能使用-2并抛出错误而反之亦然 是否可以使用getopts实现这一点?
答案 0 :(得分:2)
getopts
是一个选项解析工具;它不处理逻辑和语义(选项的含义,必需的选项或禁止的组合等)。那些围绕getopts
的代码(正如@Jens在评论中所建议的那样)。这是一个简单的例子:
# Default values:
flag1="false" # Note: "false" is just a text string, this is a cheat.
flag2="false" # See note at end.
year=2001
number=42 # because 42 is the correct default number
# Parse the supplied options
while getopts "y:n:12" OPT; do
case "$OPT" in
y)
year=${OPTARG}
;;
n)
number=${OPTARG}
;;
1)
flag1="true"
;;
2)
flag2="true"
;;
*)
echo "Usage: $0 [-y year] [-n number] [-1|-2]" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))
# Enforce rules about option combos
if $flag1 && $flag2; then
echo "$0: The options -1 and -2 cannot be specified together." >&2
exit 1
fi
这实际上只是getopts
用于解析选项的bog标准调用,后面跟if
语句强制执行-1
和 - 2
可以执行的规则一起使用。这就是它的全部内容。
请注意,我将flag1
和flag2
视为布尔变量,但shell语法中确实没有这样的东西;他们实际上只是字符串。这恰好与命令相对应。这恰好在if
语句中以半直观的方式工作。但这是一个骗子,所以不要将它们误认为真正的布尔变量。有关详细信息,请参阅here。