shFlags简介

转自:https://www.cnblogs.com/zqb-all/p/5325232.html

看到有脚本中使用了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处理的结果。0-成功处理 1-没有成功处理 2-处理出错了

如果有shFlags不识别的命令行参数,就会被更新到现在的 $@ 变量中,可以被任何其他脚本处理。
也就是,调用脚本的时候,参数会先被shFlags处理一波,把它识别的处理完后,还会把不识别的参数放回去给别人用。

注意:这里的,如果有不识别的命令行参数,跟上面所说的返回值1、2,没关系。上面的返回值为0,指正确处理了,但是此时,有不能识别的命令行参数。不能识别,是因为没有预先定义,并不是出错了。

# 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

关于类型可以是以下几种

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

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

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

  4. string 字符串
    那就是字符串

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值