• [记录]Shell中的getopts和getopt用法


    Shell中的getopts和getopt用法
    1.getopts
    getopts(shell内置命令)不能直接处理长的选项(如:--prefix=/home等),getopts有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效的选项,如果字符后面带有“:”,表示这个字符有自己的参数。getopts从命令中获取这些参数,并且删去了“-”,并将其赋值在第二个参数中,如果带有自己参数,这个参数赋值在“optarg”中。提供getopts的shell内置了这里变量$optarg存储相应选项的参数,而$optind总是存储原始$*中下一个要处理的元素位置。while getopts ":a:bc" opt  #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数.
    例子:
    #cat getopts.sh
    #!/bin/bash
    
    echo $*  
    while getopts ":a:bc" opt  
    do  
      case $opt in  
        a )
          echo $optarg  
          echo $optind
          ;;  
        b )
          echo "b $optind"
          ;;  
        c )
          echo "c $optind"
          ;;  
        ? )
          echo "error"  
          exit 1
          ;;  
      esac  
    done  
    echo $optind  
    shift $(($optind - 1))  
    #通过shift $(($optind - 1))的处理,$*中就只保留了除去选项内容的参数,可以在其后进行正常的shell编程处理了。  
    echo $0  
    echo $*  
    执行命令:
    ./getopts.sh -a 11 -b -c  
    -a 11 -b -c  
    11  
    3  
    b 4  
    c 5  
    5  
    ./getopts.sh
    
    2.getopt
    getopt(一个外部工具)具体用用法可以#man getopt
    #-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项,如-carg 而不能是-c arg
    #--long表示长选项
    例子:
    #cat getopt.sh
    #!/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.  
    #-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项  
    #如-carg 而不能是-c arg  
    #--long表示长选项  
    #"$@"在上面解释过  
    # -n:出错时的信息  
    # -- :举一个例子比较好理解:  
    #我们要创建一个名字为 "-f"的目录你会怎么办?  
    # mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用  
    # mkdir -- -f 这样-f就不会被作为选项。  
    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!  
    #会将符合getopt参数规则的参数摆在前面,其他摆在后面,并在最后面添加--  
    eval set -- "$temp"  
    #经过getopt的处理,下面处理具体选项。  
    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)    
          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  
    运行命令:
    ./getopt.sh --b-long abc -a -c33 remain  
    option b, argument `abc'  
    option a  
    option c, argument `33'  
    remaining arguments:  
    --> `remain'  
    

      

  • 相关阅读:
    【JSP】jQuery Deferred exception successed is not defined
    onclick事件传递变量参数&拼接字符串
    JQuery
    设计模式
    拖拽-原型继承案例
    继承
    原型
    闭包
    promise
    jsonp
  • 原文地址:https://www.cnblogs.com/wsjhk/p/8430975.html
Copyright © 2020-2023  润新知