shell里的getopts
By francis_hao Jul 5,2017
getopts是shell的一个内置命令。
概述
getopts optstring
name [args]
OPTIND,OPTARG,OPTERR
描述
getopts被shell程序用来分析位置参数,optstring包含需要被识别的选项字符,如果这里的字符后面跟着一个冒号,表明该字符选项需要一个参数,其参数需要以空格分隔。冒号和问号不能被用作选项字符。getopts每次被调用时,它会将下一个选项字符放置到变量name中。
变量OPTIND是下一个要被处理的位置参数的索引,初始值为1。shell不会自动的复位OPTIND,如果想再次对位置参数进行分析,则需要手动对OPTIND进行复位。当选项需要参数时,getopts将参数放置在变量OPTARG中。
当所有的位置参数分析结束,getopts退出并返回一个大于0的值,OPTIND变为首个不是选项的位置参数的索引,name被置为'?'。默认情况下getopts会去分析传入的位置参数,但如果args有值,则只会分析args里的参数,args只支持形如-abc形式。
如果遇到错误,getopts会打印出错误信息,但如果optstring第一个字符是冒号,或者变量OPTERR被置为0(此项只是不打印错误信息,不会在出错后设置OPTARG的值),则会进入静默模式,不会打印错误信息。遇到的错误通常有两种情况:
1、无效的选项,此时name会被置为'?'。静默模式下,会将此无效选项置于OPTARG。非静默模式,打印错误信息,并且unset OPTARG。
2、选项需要的参数未提供,静默模式下,name会被置为':',无效选项会置于OPTARG。非静默模式,name被置为'?',unset OPTARG并打印出错信息。
getopts如果遇到一个选项(无论是否有效),返回true(0)。如果遇到结束或者产生错误,返回false
示例
示例来自参考【2】
|
#!/bin/sh |
一个运行实例

其中,-a和-b是正确的选项,-p和-c分别对应错误选项的两种情况。

本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/7123550.html
参考
【1】man bash
【2】D.坦思.linux与unix shell编程指南.机械工业出版社.2000-1
shell里的getopts的更多相关文章
- shell脚本学习之Bash shell 里各种括号的用法
今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括 ...
- [记录]Shell中的getopts和getopt用法
Shell中的getopts和getopt用法 1.getopts getopts(shell内置命令)不能直接处理长的选项(如:--prefix=/home等),getopts有两个参数,第一个参数 ...
- Bash Shell 里的各种括号
天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括号 ...
- Shell里的特殊符号
Shell里的特殊符号: (1)单引号: 由单引号括起来的符号都作为普通字符处理,他们都失去了特殊意义. (2)双引号: 除美元符号($).倒引号.反斜线(\)仍保留特殊含义外,其余符号都作为普通字符 ...
- 千万不要往 Shell 里粘贴命令!
对于用惯了 IDE 的程序员来说,在终端里敲命令可能没那么顺手,也记不住那么多复杂的命令.比较偷懒的做法就是网上搜相关的命令,复制到剪贴板往命令行窗口里一贴,完事! 但是这么做有很大的风险,为什么呢? ...
- Shell 里空语句怎么写 - 半角的冒号
Python 里的空语句写作pass for x in range(10): pass Shell 里的空语句写作 : #!/bin/bash for x in {1..10} do #echo $x ...
- Linux命令参数处理 shell脚本函数getopts
getopts 命令 用途 处理命令行参数,并校验有效选项. 语法 getopts 选项字符串 名称 [ 参数 ...] 描述 getopts 的设计目标是在循环中运行,每次执行循环,getopts ...
- linux下的Shell编程(3)shell里的流程控制
if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...
- Hive的Shell里hive> 执行操作时,出现FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask错误的解决办法(图文详解)
不多说,直接上干货! 这个问题,得非 你的hive和hbase是不是同样都是CDH版本,还是一个是apache版本,一个是CDH版本. 问题详情 [kfk@bigdata-pro01 apache-h ...
随机推荐
- ZooKeeper(1)-入门
一. Zookeeper工作机制 二.Zookeeper特点 三.Zookeeper数据结构 四.Zookeeper应用场景 统一命名服务 统一配置管理 统一集群管理 服务器动态上下线 软负载均衡
- Scrapy框架的基本使用
安装 pip install scrapy 基础使用 1. 创建一个工程:scrapy startproject 2. 在工程目录下创建一个爬虫文件 cd 工程 scrapy genspider 爬虫 ...
- python集合、函数实例
集合 1.list ==>允许重复的集合,可修改 2.tuple ==>允许重复的集合,不可修改 3.dict ==> 4.set ==>不允许重复的集合,相当于不可重复的列表 ...
- 素数环 南阳acm488(回溯法)
素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简 ...
- POJ3687 反向拓扑排序
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16032 Accepted: 4713 D ...
- [BZOJ2809][Apio2012]dispatching(左偏树)
首先对于一个节点以及它的子树,它的最优方案显然是子树下选最小的几个 用左偏树维护出每棵子树最优方案的节点,记录答案 然后它的这棵树可以向上转移给父节点,将所有子节点的左偏树合并再维护就是父节点的最优方 ...
- python2.7入门---文件I/O&简单用户交互
这篇文章开始之前,我们先来看下python中的输出方法.最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写 ...
- Android面试收集录 OpenGL ES
1.如何用OpenGL ES绘制一个三角形? 编写一个类实现Renderer接口,实现onDrawFrame方法,onSurfaceChanged方法,onSurfaceCreated方法 编写一个类 ...
- Git中从远程的分支获取最新的版本到本地——两种命令
Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge Git fetch origin master git log ...
- 深度分析如何在Hadoop中控制Map的数量(摘抄)
很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数决定.在默认情况下,最终input占据了多少block,就应该启动多少个Mapper.如果输入的 ...