你如何使用getopts?

Posted

技术标签:

【中文标题】你如何使用getopts?【英文标题】:How do you use getopts? 【发布时间】:2011-11-30 17:15:24 【问题描述】:

bash 脚本中使用 getopts 的最简单、最直接的方法是什么。

如果我有一个名为:myscript 的脚本,它 CAN 接受参数:-p -r -s -x

if argument x then exit
if argument p then echo "port 10"
if argument s then add 2+2
if argument r then echo env 

这是一个假设的脚本,但我只是想看看如何完成此操作的示例。

【问题讨论】:

Using getopts in bash shell script to get long and short command line options 的可能重复项 我看到了,没有帮助我。感谢您指出这一点 【参考方案1】:
usage()

    echo "Usage: $0 [-o <offset>] [-h];"
    exit 0;


# -o (offset) need a value
# -h prints help
offset=0    # 0 is default offset

while getopts o:s opt
do
    case "$opt" in
    d)  offset="$OPTARG";; # changing offset
    s)  usage              # calls function "usage"
    \?) echo "$OPTARG is an unknown option"
        exit 1;; # all other options
    esac
done

shift $((OPTIND-1))

【讨论】:

shift $OPTIND-1 表达式在哪个 shell 中起作用?它通常必须是 $(($OPTIND - 1)) 之类的东西,不是吗? 甚至:$((OPTIND - 1)),这是现在的标准。【参考方案2】:
while getopts :xpsr opt; do
   case $opt in
     x ) exit                                ;;
     p ) echo port 10                        ;;
     s ) (( 2 + 2 ))                         ;;
     r ) echo env                            ;;
    \? ) echo "$0##*/" [ -xpsr ]; exit 1   ;;
  esac
done

【讨论】:

甜蜜.. 谢谢 Dimitre。但是这最后一部分是做什么的呢? \? ) echo "$0##*/" [-xpsr]; 1号出口 打印使用情况,如果通过了无效选项,则存在。 不,我没有(也许我从字面上看问题:))。我也没有展示如何处理选项的参数...

以上是关于你如何使用getopts?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 getOptions 检索 Jcrop 中的 truesize 数组值?

如何使用 getopts 创建标志以运行命令

如何在 bash 中使用 getopts 的示例

如何使用 getopt_long 解析多个参数?

如何在 Bash 中使用 getopt 和长选项?

如何使用 getopts 忽略无效参数并继续解析?