使用其他选项之一处理 Bash getopts 选项
Handle Bash getopts option with one of other options
我当前的 Bash 脚本如下所示。到目前为止,除了选项 -g
之外它都在工作。我希望这个选项是可选的,但没有 -c
或 -n
.
中的任何一个都不能使用它
所以我的意思是:
-g
应完全可选
- 但是,如果给出,则
-c
或 -n
也必须存在。
不幸的是,我不知道该怎么做。
while getopts ':cniahg:' opt; do
case $opt in
g) DAYS_GRACE_PERIOD=$OPTARG ;;
c) prune_containers ;;
i) prune_images ;;
n) prune_networks ;;
a)
prune_containers
prune_networks
prune_images
;;
:) echo "Invalid option: $OPTARG requires an argument" 1>&2 ;;
h) print_usage ;;
\?) print_usage ;;
*) print_usage ;;
esac
done
shift $((OPTIND - 1))
-g option to be optional but it cannot be used without any of -c or -n.
在变量中存储选项 c
,在另一个变量中使用选项 n
,在另一个变量中使用选项 g
。解析选项后,使用变量检查条件。
g_used=false c_used=false n_used=false
while .....
g) g_used=true; ...
c) c_used=true; ...
n) n_used=true; ...
....
# something like that
if "$g_used"; then
if ! "$c_used" || ! "$n_used"; then
echo "ERROR: -g option was used, but -c or -n option was not used"
fi
fi
# ex. move the execution of actions after the option parsing
if "$c_used"; then
prune_containers
fi
if "$n_used"; then
prune_networks
fi
看起来你的循环执行带有解析参数的动作。在您的解析选项循环中,您可以只设置与每个选项关联的变量,然后在循环之后根据 "state of all options" 执行操作。在循环之后,因为那时您将拥有所有使用的选项的 "global" 视图,所以基于多个标志的解析和决策会更容易。
我当前的 Bash 脚本如下所示。到目前为止,除了选项 -g
之外它都在工作。我希望这个选项是可选的,但没有 -c
或 -n
.
所以我的意思是:
-g
应完全可选- 但是,如果给出,则
-c
或-n
也必须存在。
不幸的是,我不知道该怎么做。
while getopts ':cniahg:' opt; do
case $opt in
g) DAYS_GRACE_PERIOD=$OPTARG ;;
c) prune_containers ;;
i) prune_images ;;
n) prune_networks ;;
a)
prune_containers
prune_networks
prune_images
;;
:) echo "Invalid option: $OPTARG requires an argument" 1>&2 ;;
h) print_usage ;;
\?) print_usage ;;
*) print_usage ;;
esac
done
shift $((OPTIND - 1))
-g option to be optional but it cannot be used without any of -c or -n.
在变量中存储选项 c
,在另一个变量中使用选项 n
,在另一个变量中使用选项 g
。解析选项后,使用变量检查条件。
g_used=false c_used=false n_used=false
while .....
g) g_used=true; ...
c) c_used=true; ...
n) n_used=true; ...
....
# something like that
if "$g_used"; then
if ! "$c_used" || ! "$n_used"; then
echo "ERROR: -g option was used, but -c or -n option was not used"
fi
fi
# ex. move the execution of actions after the option parsing
if "$c_used"; then
prune_containers
fi
if "$n_used"; then
prune_networks
fi
看起来你的循环执行带有解析参数的动作。在您的解析选项循环中,您可以只设置与每个选项关联的变量,然后在循环之后根据 "state of all options" 执行操作。在循环之后,因为那时您将拥有所有使用的选项的 "global" 视图,所以基于多个标志的解析和决策会更容易。