gpt4 book ai didi

shell - 如何使用 getopts 在命令行中传递 shell 脚本强制和可选标志?

转载 作者:行者123 更新时间:2023-12-04 16:17:07 27 4
gpt4 key购买 nike

我想通过 getopts 将 3 个参数传递到我的 shell 脚本。该脚本至少需要前2个参数,第三个参数是可选的。如果未设置,则使用其默认值。以便以下都有效:

sh script.sh -a "/home/dir" -b 3
sh script.sh -a "/home/dir" -b 3 -c "String"

我试着像下面那样做,但它总是忽略我输入的参数。

usage() {
echo "Usage: Script -a <homedir> -b <threads> -c <string>"
echo "options:"
echo "-h show brief help"

1>&2; exit 1;
}

string="bla"

while getopts h?d:t:a: args; do
case $args in
-h|\?)
usage;
exit;;
-a ) homedir=d;;
-b ) threads=${OPTARG};;
-c ) string=${OPTARG}
((string=="bla" || string=="blubb")) || usage;;
: )
echo "Missing option argument for -$OPTARG" >&2; exit 1;;
* )
echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
esac
done

我是这个 getopts 的新手,之前我只是按特定顺序添加参数,我不想在这里这样做。我在这里阅读了很多问题,但不幸的是没有找到我需要的方式。

在这里我真的很感谢你的帮助。谢谢:)

最佳答案

您的脚本中有几个错误。最重要的是,$args 只包含选项的字母,没有前导破折号。此外,您提供给 getopts (h?d:t:a:) 的选项字符串不适合您实际处理的选项 (h, ?abc)。这是循环的更正版本:

while getopts "h?c:b:a:" args; do
case $args in
h|\?)
usage;
exit;;
a ) homedir=d;;
b ) threads=${OPTARG};;
c ) string=${OPTARG}
echo "Entered string: $string"
[[ $string=="bla" || $string=="blubb" ]] && usage;;
: )
echo "Missing option argument for -$OPTARG" >&2; exit 1;;
* )
echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
esac
done

关于shell - 如何使用 getopts 在命令行中传递 shell 脚本强制和可选标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209956/

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