Bash 包含参数值和可选标志的脚本

Bash script with both parameter values and optional flags

我正在编写一个 bash 脚本,它依赖于通过参数提供的许多值并提供可选的(布尔)标志。

基于 this page 上的示例,我使用 -h 选项扩展了脚本,如下所示:

human=false

while getopts u:a:f:h: flag
do
    case "${flag}" in
        u) username=${OPTARG};;
        a) age=${OPTARG};;
        f) fullname=${OPTARG};;
        h) human=true;;
    esac
done

if $human; then
        echo "Hello human"
else
        echo "You're not human"
fi

echo "Username: $username";
echo "Age: $age";
echo "Full Name: $fullname";

问题是,-h 参数需要一个值,而它应该作为标志处理:

bash test.sh -u asdf -h
test.sh: option requires an argument -- h
You're not human
Username: asdf
Age: 
Full Name: 

如何在 bash 脚本中同时使用带有值和标志的参数?

您应该将 getopts u:a:f:h: 替换为 getopts u:a:f:h

删除 : 你告诉 getopts h 没有额外的参数。