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
shFlags简介的更多相关文章
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- Cesium简介以及离线部署运行
Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...
随机推荐
- java中的等于
数字的比较等于用“==” 不等于用“!=” 字符的比较等于用“.equals”不等于用”!s1.equals(s2)“
- lib库dll库的使用方法与关系
一.lib库 lib库有两种:一种是静态lib(static Lib),也就是最常见的lib库,在编译时直接将代码加入程序当中.静态lib中,一个lib文件实际上是任意个obj文件的集合,obj文件是 ...
- class Solution(object): def fizzBuzz(self, n): a = [] i = 1 while(i <= n): if(i%15 == 0): a.append("FizzBuzz") elifleetcode day_01
412. Fizz Buzz Write a program that outputs the string representation of numbers from 1 to n. But fo ...
- Linux串口中的超时设置
在Linux下使用串口通信时,默认的阻塞模式是不实用的.而采用select或epoll机制的非阻塞模式,写代码有比较麻烦.幸好Linux的串口自己就带有超时机制. Linux下使用termios.h中 ...
- xmind portable
portable : http://dl2.xmind.cn/xmind-7.5-update1-portable.zip
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- jQuery视差滚动插件,(附原理分析,调用方法)
演示地址:http://www.jq22.com/jquery-info1799 jquery插件,使用验证过可用. 分析源代码后总结原理:设置background样式为fixed,判断浏览器滚动距离 ...
- python 单步调试初探(未完待续)
pdb 调试: import pdb pdb.set_trace() pudb 调试: http://python.jobbole.com/82638/
- javaweb 中的路径问题汇总
路径问题汇总 http://localhost/day10/AServlet request.getRequestDispatcher("/AServlet") ==&g ...
- 解决selenium2在IE11上出错的问题,如Unable to get browser
官方解决方案: https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration Re ...