如果传递了两个特定参数,如何退出 getopt?
How to exit getopt if two specific arguments are passed?
我想做的是,如果同时传递两个特定参数,脚本将退出并执行 HELP 函数。
while getopts ":H:D:S:h:" arg; do
case "${arg}" in
H) HOUR=${OPTARG};;
D) DAY=${OPTARG};;
h) HELP;;
\?) #unrecognized option - show help
HELP;;
因此,如果同时显示 H 和 D,我想终止脚本 运行 并要求用户再次键入。
显然我可以使用类似的东西:
if [[ -z "$HOUR" || -z "$DAY" ]]
then
HELP
但想知道是否有更好的选择来做这样的事情。干杯!
getopts
不提供对互斥选项的任何明确支持。我建议在 case
语句中捕获它:
case $arg of
-H) if [[ -n $DAY ]]; then
printf '-D already detected\n'
exit 1
else
HOUR=$OPTARG
fi
;;
-D) if [[ -n $HOUR ]]; then
printf '-H already detected\n'
exit 1
else
DAY=$OPTARG
fi
;;
-h) HELP
;;
*) HELP
;;
esac
我想做的是,如果同时传递两个特定参数,脚本将退出并执行 HELP 函数。
while getopts ":H:D:S:h:" arg; do
case "${arg}" in
H) HOUR=${OPTARG};;
D) DAY=${OPTARG};;
h) HELP;;
\?) #unrecognized option - show help
HELP;;
因此,如果同时显示 H 和 D,我想终止脚本 运行 并要求用户再次键入。
显然我可以使用类似的东西:
if [[ -z "$HOUR" || -z "$DAY" ]]
then
HELP
但想知道是否有更好的选择来做这样的事情。干杯!
getopts
不提供对互斥选项的任何明确支持。我建议在 case
语句中捕获它:
case $arg of
-H) if [[ -n $DAY ]]; then
printf '-D already detected\n'
exit 1
else
HOUR=$OPTARG
fi
;;
-D) if [[ -n $HOUR ]]; then
printf '-H already detected\n'
exit 1
else
DAY=$OPTARG
fi
;;
-h) HELP
;;
*) HELP
;;
esac