zoukankan      html  css  js  c++  java
  • getopts

    http://blog.sina.com.cn/s/blog_81c2cf020100v0wh.html
    http://www.cnblogs.com/xiangzi888/archive/2012/04/03/2430736.html

    获取UNIX类型的选项:

      unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式:

      command -options parameters

      如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。该语句的格式为:

      getopts option_string variable

      其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同 option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字 符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。

      有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一个冒号。当 getopts命令发现冒号后,会从命令行该选项后读取该值。若该值存在,那么将被存在一个特殊的变量OPTARG中。如果该值不存在,getopts命 令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。

      optstring  option字符串,会逐个匹配

      varname    每次匹配成功的选项

      arg        参数列表,没写时它会取命令行参数列表

      $OPTIND    特殊变量,option index,会逐个递增, 初始值为1

      $OPTARG    特殊变量,option argument,不同情况下有不同的值

      细则1:当optstring以”:“开头时,getopts会区分invalid option错误和miss option argument错误。

      invalid option时,varname会被设成?,$OPTARG是出问题的option;

      miss option argument时,varname会被设成:,$OPTARG是出问题的option。

      如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使

      varname被设成?,$OPTARG是出问题的option。

      细则2:当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中;

      如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option,

      否则varname的值是?,$OPTARG是该option。(参照细则1)

    getopts options variable

      getopts 的设计目标是在循环中运行,每次执行循环,getopts 就检查下一个命令行参数,并判断它是否合法。即检查参数是否以 - 开头,后面跟一个包含在 options 中的字母。如果是,就把匹配的选项字母存在指定的变量 variable 中,并返回退出状态0;如果 - 后面的字母没有包含在 options 中,就在 variable 中存入一个 ,并返回退出状态0;如果命令行中已经没有参数,或者下一个参数不以 - 开头,就返回不为0的退出状态。

    二、使用举例

    复制代码
    cat args
    复制代码
    #!/bin/bash
    while getopts h:ms option
    do 
    case "$option" in
    h)
    echo "option:h, value $OPTARG"
    echo "next arg index:$OPTIND";;
    m)
    echo "option:m"
    echo "next arg index:$OPTIND";;
    s)
    echo "option:s"
    echo "next arg index:$OPTIND";;
    ?)
    echo "Usage: args [-h n] [-m] [-s]"
    echo "-h means hours"
    echo "-m means minutes"
    echo "-s means seconds"
    exit 1;;
    esac
    done

    echo "*** do something now ***"
    复制代码
    复制代码
    复制代码
    ./args -h 100 -ms
    复制代码
    option:h, value 100
    next arg index:3
    option:m
    next arg index:3
    option:s
    next arg index:4
    *** do something now ***
    复制代码
    复制代码
    复制代码
    ./args -t
    ./args: illegal option -- t
    Usage: args [-h n] [-m] [-s]
    -h means hours
    -m means minutes
    -s means seconds
  • 相关阅读:
    SpringMvc完成ajax功能
    接收的参数为日期类型
    Mybatis的逆向工程(generator)以及分页助手(pageHelper)
    springMVC静态资源的映射
    Mybatis框架
    写一个简单的SpringMvc的demo
    SpringMvc流程
    controller进行数据保存以及如何进行重定向跳转
    我爱C语言
    三列布局中有两列内容固定
  • 原文地址:https://www.cnblogs.com/virusolf/p/5452023.html
Copyright © 2011-2022 走看看