首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有多个强制选项的bash getopts

带有多个强制选项的bash getopts
EN

Stack Overflow用户
提问于 2012-07-01 11:50:53
回答 1查看 90.2K关注 0票数 50

是否可以使用getopts一起处理多个选项?例如,myscript -iR或myscript -irv。

此外,我有一种情况下,基于条件脚本将需要强制选项。例如,如果脚本的参数是一个目录,我将需要指定-r或-R选项以及任何其他选项(myscript -ir mydir或myscript -iR mydir或myscript -i -r mydir或myscript -i -R mydir),如果文件只有-i就足够了(myscript -i myfile)。

我试着搜索,但没有得到任何答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-01 12:08:25

您可以连接您提供的选项,getopts将对它们进行分隔。在case语句中,您将分别处理每个选项。

你可以在看到选项时设置一个标志,并检查以确保强制的“选项”(!)在getopts循环完成后出现。

下面是一个示例:

代码语言:javascript
复制
#!/bin/bash
rflag=false
small_r=false
big_r=false

usage () { echo "How to use"; }

options=':ij:rRvh'
while getopts $options option
do
    case "$option" in
        i  ) i_func;;
        j  ) j_arg=$OPTARG;;
        r  ) rflag=true; small_r=true;;
        R  ) rflag=true; big_r=true;;
        v  ) v_func; other_func;;
        h  ) usage; exit;;
        \? ) echo "Unknown option: -$OPTARG" >&2; exit 1;;
        :  ) echo "Missing option argument for -$OPTARG" >&2; exit 1;;
        *  ) echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
    esac
done

if ((OPTIND == 1))
then
    echo "No options specified"
fi

shift $((OPTIND - 1))

if (($# == 0))
then
    echo "No positional arguments specified"
fi

if ! $rflag && [[ -d $1 ]]
then
    echo "-r or -R must be included when a directory is specified" >&2
    exit 1
fi

这代表了一个完整的getopts函数的参考实现,但只是一个更大的脚本的草图。

票数 120
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11279423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档