命令行参数的处理函数getopt
命令参数
在linux下, shell命令的参数分两种情况:
a.参数需要附加信息, 如"wget http://www.abc.com/1.zip -o 1.zip"
b.参数不需要附加信息, 如"ls -l"
有点像英语中的及物动词和不及物动词
getopt
#include <unistd.h>
int getopt(int argc, char * const argv[], const char * optstring);
extern char *optarg; //指向参数的附加信息
extern int optind; // 初始化值为1,下一次调用getopt时,从optind存储的位置重新开始检查选项。
extern int opterr; // 初始化值为1,当opterr=0时,getopt不向stderr输出错误信息。
extern int optopt; // 当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,
// 该选项存储在optopt中, getopt返回'?’。
getopt前两个参数就是main函数里的两个参数
optstring是一个字符串包含需要捕获的参数,例"o:l"表示要捕捉o和l这两个参数
- 后面带冒号的参数表示该参数有附加信息, 附加信息可通过optarg获取
- 后面不带冒号的参数表示不带附加信息
- 有些参数后面会带两个冒号, 表示附加信息可有可无, 但是如果有的话附加信息与参数之间不能有空格
- 如果参数不在获取的字符串中, optarg返回一个问号, 同时getopt会输出错误信息, 可指定opterr=0来取消错误信息的输出
optind:
默认值为1, 即初始位置是a.out后面跟的第一个参数
假设当前optstring="a:b", 每调用一次getopt函数, optind就向后移动一次, 最后停留在第一个非optstring参数和非参数附加信息的参数上.
当遇到-b时, optind+=1, 即向后移动一位
当遇到-a时, optind+=2, 因为-a还会带一个附加信息
例如: a.out -a arg -b ...(不带-的其它任意参数), 循环执行完分析后, optind=4, 即停留在非optstring及其附加信息的参数上
例子
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int ch;
opterr=0;
while((ch=getopt(argc,argv,"o:l")) != -1){
switch(ch){
case 'o':
printf("option -o : %s\n",optarg); break;
case 'l':
printf("option -l : l\n"); break;
default:
printf("unknown option: %c\n",ch);
}
}
return 0;
}
测试:
a.out -o arg
a.out -l
a.out -lo arg //多个参数一起写时, 不及物参数写前面
命令行参数的处理函数getopt的更多相关文章
- Shell 参数(2) --解析命令行参数工具:getopts/getopt
getopt 与 getopts 都是 Bash 中用来获取与分析命令行参数的工具,常用在 Shell 脚本中被用来分析脚本参数. 两者的比较 (1)getopts 是 Shell 内建命令,geto ...
- 如何让python脚本支持命令行参数--getopt和click模块
一.如何让python脚本支持命令行参数 1.使用click模块 如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.h ...
- 如何获取PHP命令行参数
使用 PHP 开发的同学多少都会接触过 CLI 命令行.经常会有一些定时任务或者一些脚本直接使用命令行处理会更加的方便,有些时候我们会需要像网页的 GET . POST 一样为这些命令行脚本提供参数. ...
- [Objective-C语言教程]命令行参数(23)
执行时,可以将一些值从命令行传递给Objective-C程序. 这些值称为命令行参数,很多时候它们对程序很重要,特别是当想要从外部控制程序而不是在代码中对这些值进行硬编码时就很有用了. 命令行参数使用 ...
- C和指针--命令行参数
1.命令行参数 C程序的main函数具有两个形参,第1个通常称为argc,它表示命令行参数的数目.第2个称为argv,它指向一组参数值.由于参数的数目并没有内在的限制,所以argv指向这组参数值(本质 ...
- getopt函数的使用——分析命令行参数
getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...
- 命令行参数解析函数getopt和getopt_long函数【转】
原文地址:http://blog.csdn.net/cashey1991/article/details/7942809 getopt和getopt_long函数 平时在写程序时常常需要对命令行参 ...
- [转]Python 命令行参数和getopt模块详解
FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...
- Python 命令行参数和getopt模块详解
有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...
随机推荐
- c语言中赋值语句的结果
c语言中赋值语句的结果 最近在看<C语言接口与实现>,在第一章就发现一个以前很少用到的用法.在实现strcpy函数时,书中给出了两种实现. //version 1, 使用数组实现(新手惯用 ...
- jq使用手册
jq 使用手册 翻译整理:Young.J 官方网站:http://jquery.com jQuery是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写 ...
- 数码相框之Makefile笔记
本程序的Makefile分为3类:1. 顶层目录的Makefile2. 顶层目录的Makefile.build3. 各级子目录的Makefile 一.各级子目录的Makefile: 它最简单,形式如下 ...
- 剑指Offer23 二叉树中和为sum的路径
/************************************************************************* > File Name: 23_FindPa ...
- python之supervisord启动脚本
Supervisord是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效.可以将非Daemon的应用转为daemon程序.关于supervisord的安装和配置,在网上已经有 ...
- jsonString转NSDictionary
NSData *webData = [ \": {\"name\": \"Jerry\",\"age\": \"12\& ...
- Bootstrap,导航栏点击效果修复(补)
前言: 昨天晚上休息,忘记发博客了.对于学习这件是,还是需要坚持的.想想自建一个Jekyll博客模版还是很兴奋的,话不多说,看正文吧! 关于开发: 先看个Demo吧,点这里.你会发现,点击是没有效果 ...
- Cocos2d-x移植到WindowsPhone8移植问题-框架rapidjson移植问题
Cocos2d-x 3.0提供了JSON框架rapidjson可以在Windows Phone 8平台使用,如果没有进行必要的配置,在编译的时候会报错,document.h等头文件找不到的错误.在Wi ...
- 苹果在Xcode6中弃用segue的push和model
苹果在Xcode6中弃用了segue的push和model.被show和present取代. 下面是新版本中每种类型的使用总结和例子.建议自己使用前先在测试项目中自己试一试 Show 根据当前屏幕中的 ...
- 【学习笔记】【C语言】逗号运算符
逗号运算符主要用于连接表达式,例如: int a = 9; int b = 10; a = a+1 , b = 3*4; * 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为: 表达式1, ...