为了账号安全,请及时绑定邮箱和手机立即绑定

如何在bash中使用getopts的示例

如何在bash中使用getopts的示例

泛舟湖上清波郎朗 2019-07-04 10:46:09
如何在bash中使用getopts的示例我想打电话myscript以这种方式存档:$ ./myscript -s 45 -p any_string或$ ./myscript -h >>> should display help $ ./myscript    >>> should display help我的要求是:getopt在这里获取输入参数检查一下-s存在,如果不返回错误控件之后的值。-s是45还是90检查-p存在,并且后面有一个输入字符串。如果用户输入./myscript -h或者只是./myscript然后显示帮助到目前为止,我尝试过这样的代码:#!/bin/bashwhile getopts "h:s:" arg; do   case $arg in     h)       echo "usage"        ;;     s)       strength=$OPTARG       echo $strength      ;;   esacdone但有了这段代码我会发现错误。如何使用Bash和getopt?
查看完整描述

5 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

打包的示例getopt(我的发行版放进去了/usr/share/getopt/getopt-parse.bash)看起来它覆盖了你所有的案件:


#!/bin/bash


# A small example program for using the new getopt(1) program.

# This program will only work with bash(1)

# An similar program using the tcsh(1) script language can be found

# as parse.tcsh


# Example input and output (from the bash prompt):

# ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long "

# Option a

# Option c, no argument

# Option c, argument `more'

# Option b, argument ` very long '

# Remaining arguments:

# --> `par1'

# --> `another arg'

# --> `wow!*\?'


# Note that we use `"$@"' to let each command-line parameter expand to a 

# separate word. The quotes around `$@' are essential!

# We need TEMP as the `eval set --' would nuke the return value of getopt.

TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \

     -n 'example.bash' -- "$@"`


if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi


# Note the quotes around `$TEMP': they are essential!

eval set -- "$TEMP"


while true ; do

    case "$1" in

        -a|--a-long) echo "Option a" ; shift ;;

        -b|--b-long) echo "Option b, argument \`$2'" ; shift 2 ;;

        -c|--c-long) 

            # c has an optional argument. As we are in quoted mode,

            # an empty parameter will be generated if its optional

            # argument is not found.

            case "$2" in

                "") echo "Option c, no argument"; shift 2 ;;

                *)  echo "Option c, argument \`$2'" ; shift 2 ;;

            esac ;;

        --) shift ; break ;;

        *) echo "Internal error!" ; exit 1 ;;

    esac

done

echo "Remaining arguments:"

for arg do echo '--> '"\`$arg'" ; done


查看完整回答
反对 回复 2019-07-04
  • 5 回答
  • 0 关注
  • 614 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信