看到有脚本中使用了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简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. log4jdbc 使用

    像 hibernate, mybatis 都是不打印真正执行的sql的,所以借助 log4jdbc 打印sql以及统计执行时间是非常方便的. 配置log4jdbc 有很多种方法,比如通过spring的 ...

  2. 如何修改 Total commander 配置文件的路径

    在官方主页 http://www.ghisler.com/tools.htm#other 上提供了一个名为 INIreloc.exe  的小程序,它可以变更ini文件的保存位置.

  3. PHP图片裁剪与缩放 / 无损裁剪图片

    图片太大且规格不统一,显示的控制需要靠JavaScript来完成,用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到 ...

  4. Linux文件查找命令 find 详解

    关于find命令 由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权 ...

  5. am335x watchdog 设备出错

    问题描述: am335x watchdog 设备节点打开失败. 如果是直接将omap_wdt 直接编译成uImage,这样会出现打开文件节点失败的情况. 如果单独编译成模块在后面文件系统内插入则不会. ...

  6. android studio--百度定位集成001

    安卓现在的大趋势已经是普遍使用androidstudio(安装包[https://yunpan.cn/ckc54idj3JVJb  访问密码 664f])了.这个是集成的一个好的环境. 今天来搞个百度 ...

  7. (转: daifubing的博客 )Delphi二维码中文支持、分组、批量打印经验小结

    一直也没接触到什么复杂的报表,都是一些简单的报表,在DelphI下使用QuickReport一般也就能满足需要了,由于公司现在需求的变化,对条码扫描提出了新的要求,主要是扫码要包含更多地内容,以前的一 ...

  8. Maven搭建 Spring环境

    http://www.cnblogs.com/huaizuo/p/4920308.html http://mvnrepository.com/artifact/commons-logging/comm ...

  9. 在.NET Core中使用MEF

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软的可托管扩展框架也移植到.NET Core上了. 可托管扩展框架(Managed ...

  10. 【Cocos2d-x for WP8 学习整理】(3)CCScrollView 实现捕鱼达人一样的场景选择界面

    UI 界面一般是游戏里比较独立的地方,因为游戏引擎一般都比较注意基础的功能封装,很少会关注UI,但是 UI 确是玩家第一眼看到的效果,因此能否实现一个美观的UI对于提升游戏的整体美观有着很大的帮助. ...