猿问

如何在bash中使用getopts的示例

如何在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?


泛舟湖上清波郎朗
浏览 618回答 5
5回答

富国沪深

打包的示例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 ;;    esacdoneecho "Remaining arguments:"for arg do echo '--> '"\`$arg'" ; done
随时随地看视频慕课网APP

相关分类

Python
我要回答