shell 在bash脚本中处理多个选项

t0ybt7op  于 2022-12-13  发布在  Shell
关注(0)|答案(2)|浏览(209)

我有一个简单的bash脚本

if [ $# -eq 0 ]
    then du
else
while getopts :d:h:s:r:f:a: option; do
    case $option in
        d) echo 'd';;
        h) echo 'h';;
        s) echo 's';;
        r) echo 'r';;
        f) echo 'f';;
        a) echo 'a';;
        \?) echo 'option invalide,-h pour obtenir I aide' 
    esac
done
fi

例如,当我用./script.sh -d -a调用它时,我希望返回“d a”。
问题是我只能得到“d”或“a”如果我调用它在其他顺序。
我怎样才能让脚本执行所有当前选项指令?

vltsax25

vltsax251#

您对getopt的调用通过在每个名称后面加上一个:来声明每个带参数的选项。因此,script.sh -d -a可以识别带参数-a-d选项,但您忽略了该参数。script.sh -a -d也是如此:您可以识别-a,但忽略其-d选项。
如果省略了: s,则选项只是不带参数的标志,您将依次看到每个选项:

while getopts :dhsrfa option; do

当您 do 使用:时,随选项提供的参数在OPTARG参数中可用。请尝试使用以下脚本:

while getopts :d:h:s:r:f:a: option; do
    case $option in
        d) echo "d with $OPTARG";;
        h) echo "h with $OPTARG";;
        s) echo "s with $OPTARG";;
        r) echo "r with $OPTARG";;
        f) echo "f with $OPTARG";;
        a) echo "a with $OPTARG";;
        \?) echo 'option invalide,-h pour obtenir I aide' 
    esac
done
1szpjjfi

1szpjjfi2#

您可以向bash脚本传递多个参数。通常,向任何bash脚本传递多个参数的语法如下:
script.sh arg 1 arg 2 arg 3...第二个参数将由$2变量引用,第三个参数将由$3引用,...依此类推。
变量$0包含bash脚本的名称,以防您感到奇怪!

相关问题