标签:
看到有脚本中使用了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