gpt4 book ai didi

bash - 阅读 $OPTARG 以获得可选标志?

转载 作者:行者123 更新时间:2023-11-29 08:43:42 25 4
gpt4 key购买 nike

我希望能够在我的脚本中接受强制和可选标志。这是我目前所拥有的。

#!bin/bash

while getopts ":a:b:cdef" opt; do
case $opt in
a ) APPLE="$OPTARG";;
b ) BANANA="$OPTARG";;
c ) CHERRY="$OPTARG";;
d ) DFRUIT="$OPTARG";;
e ) EGGPLANT="$OPTARG";;
f ) FIG="$OPTARG";;
\?) echo "Invalid option: -"$OPTARG"" >&2
exit 1;;
: ) echo "Option -"$OPTARG" requires an argument." >&2
exit 1;;
esac
done
echo "Apple is "$APPLE""
echo "Banana is "$BANANA""
echo "Cherry is "$CHERRY""
echo "Dfruit is "$DFRUIT""
echo "Eggplant is "$EGGPLANT""
echo "Fig is "$FIG""

但是,以下输出:

bash script.sh -a apple -b banana -c cherry -d dfruit -e eggplant -f fig

...输出这个:

Apple is apple
Banana is banana
Cherry is
Dfruit is
Eggplant is
Fig is

如您所见,可选标志并没有像使用必需标志那样使用 $OPTARG 提取参数。有没有办法在不摆脱整洁的“:)”错误处理的情况下读取可选标志上的 $OPTARG?

=======================================

编辑: 我最终听从了下面吉尔伯特的建议。这是我所做的:

#!/bin/bash

if [[ "$1" =~ ^((-{1,2})([Hh]$|[Hh][Ee][Ll][Pp])|)$ ]]; then
print_usage; exit 1
else
while [[ $# -gt 0 ]]; do
opt="$1"
shift;
current_arg="$1"
if [[ "$current_arg" =~ ^-{1,2}.* ]]; then
echo "WARNING: You may have left an argument blank. Double check your command."
fi
case "$opt" in
"-a"|"--apple" ) APPLE="$1"; shift;;
"-b"|"--banana" ) BANANA="$1"; shift;;
"-c"|"--cherry" ) CHERRY="$1"; shift;;
"-d"|"--dfruit" ) DFRUIT="$1"; shift;;
"-e"|"--eggplant" ) EGGPLANT="$1"; shift;;
"-f"|"--fig" ) FIG="$1"; shift;;
* ) echo "ERROR: Invalid option: \""$opt"\"" >&2
exit 1;;
esac
done
fi

if [[ "$APPLE" == "" || "$BANANA" == "" ]]; then
echo "ERROR: Options -a and -b require arguments." >&2
exit 1
fi

非常感谢大家。到目前为止,这非常有效。

最佳答案

: 表示“接受参数”,而不是“强制参数”。也就是说,选项字符后面没有跟 : 表示标志样式选项(无参数),而选项字符后跟 : 表示带有参数的选项。

因此,你可能想要

getopts "a:b:c:d:e:f:" opt

如果您想要“强制”选项(有点矛盾),您可以在参数解析后检查您的强制选项值是否已全部设置。

关于bash - 阅读 $OPTARG 以获得可选标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com