zoukankan      html  css  js  c++  java
  • shFlags简介

    看到有脚本中使用了shFlags,于是google了一下,发现还是个挺方便的东西。

    https://github.com/kward/shflags/wiki/Documentation12x

     shaflags有助于在脚本中简单地处理命令行的参数。

    如下例子

    #!/bin/sh
    
    # source shflags
    . /path/to/shflags
    
    # define a 'name' command-line string flag
    DEFINE_string 'name' 'world' 'name to say hello to' 'n'
    
    # parse the command-line
    FLAGS "$@" || exit $?
    eval set -- "${FLAGS_ARGV}"
    
    # say Hello!
    echo "Hello, ${FLAGS_name}!"

    下面逐行分析

    # source shflags
    . /path/to/shflags

    这个是引入了shflags,这样后面才能用。

    # define a 'name' command-line string flag
    DEFINE_string 'name' 'world' 'name to say hello to' 'n'

    这个是定义了一个string类型的变量,名字是name,默认值是world,说明文字是name to say hello to 缩写是 n

    它说明了以下两件事情

    1 接受到命令行选项 -n (或者--name)的时候,将随后的参数当成一个字符串,存入变量 name 中

    2 接收到命令行选项 -h (或者 --help)的时候,显示”name to say hello to“

    # parse the command-line
    FLAGS "$@" || exit $?
    eval set -- "${FLAGS_ARGV}"

     前半句FLAGS "$@" 将所有命令行参数送到shFlags库中进行处理,如果都成功,返回0(${FLAGS_TRUE})。如果返回的是1(${FLAGS_FALSE}) 或 2 (${FLAGS_ERROR}),那就执行exit $? 返回 $? 

     如果有shFlags不识别的命令行参数,就会被更新到现在的 $@ 变量中,可以被任何其他脚本处理。

    也就是,调用脚本的时候,参数会先被shFlags处理一波,把它识别的处理完后,还会把不识别的参数放回去给别人用。

    # say Hello!
    echo "Hello, ${FLAGS_name}!"

    这里就是输出了,使用了变量name,也就是FLAGS_name的值。

    所以执行结果会是

    $ ./hello_world.sh
    Hello, world!
    
    $ ./hello_world.sh -n Kate
    Hello, Kate!
    $ ./hello_world.sh --name 'Kate Ward'
    Hello, Kate Ward!
    
    $ ./hello_world.sh -h
    USAGE: ./hello_world.sh [flags] args
    flags:
      -h  show this help
      -n  name to say hello to

    关于类型可以是以下几种

     boolean 布尔
    可使用${FLAGS_TRUE} 和${FLAGS_FALSE}
    注意在shell中true是0 false是1

    float 浮点
    在shell中是字符串,所以在比较的时候要按字符串的规则来
    也就是使用 = 和 != 而不是使用 eq, ge, gt, le, lt, ne

    integer 整型
    shell支持整型所以应该使用 (eq, ge, gt, ...)

    string 字符串
    那就是字符串

    可以定义 FLAGS_HELP 提供自己的help
    不然就会使用默认的help模板

    本文链接:http://www.cnblogs.com/zqb-all/p/5325232.html

  • 相关阅读:
    谷歌被墙,怎样给谷歌浏览器加入迅雷下载插件
    python文件和文件夹訪问File and Directory Access
    svn简单介绍
    javaproject积累——树形结构的操作
    Android多线程研究(1)——线程基础及源代码剖析
    Android4.4 Telephony流程分析——彩信(MMS)发送过程
    hadoop优质链接
    Android开发系列(二十一):Spinner的功能和使用方法以及实现列表选择框
    锤子Smartisan T1手机官方4.4.2系统内核版本号信息
    深入研究Clang(五) Clang Lexer代码阅读笔记之Lexer
  • 原文地址:https://www.cnblogs.com/zqb-all/p/5325232.html
Copyright © 2011-2022 走看看