命令参数

在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的更多相关文章

  1. Shell 参数(2) --解析命令行参数工具:getopts/getopt

    getopt 与 getopts 都是 Bash 中用来获取与分析命令行参数的工具,常用在 Shell 脚本中被用来分析脚本参数. 两者的比较 (1)getopts 是 Shell 内建命令,geto ...

  2. 如何让python脚本支持命令行参数--getopt和click模块

    一.如何让python脚本支持命令行参数 1.使用click模块 如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.h ...

  3. 如何获取PHP命令行参数

    使用 PHP 开发的同学多少都会接触过 CLI 命令行.经常会有一些定时任务或者一些脚本直接使用命令行处理会更加的方便,有些时候我们会需要像网页的 GET . POST 一样为这些命令行脚本提供参数. ...

  4. [Objective-C语言教程]命令行参数(23)

    执行时,可以将一些值从命令行传递给Objective-C程序. 这些值称为命令行参数,很多时候它们对程序很重要,特别是当想要从外部控制程序而不是在代码中对这些值进行硬编码时就很有用了. 命令行参数使用 ...

  5. C和指针--命令行参数

    1.命令行参数 C程序的main函数具有两个形参,第1个通常称为argc,它表示命令行参数的数目.第2个称为argv,它指向一组参数值.由于参数的数目并没有内在的限制,所以argv指向这组参数值(本质 ...

  6. getopt函数的使用——分析命令行参数

    getopt(分析命令行参数) getopt(分析命令行参数) 短参数的定义 返回值 范例 getopt_long 相关函数表头文件#include<unistd.h> 函数声明int g ...

  7. 命令行参数解析函数getopt和getopt_long函数【转】

    原文地址:http://blog.csdn.net/cashey1991/article/details/7942809 getopt和getopt_long函数   平时在写程序时常常需要对命令行参 ...

  8. [转]Python 命令行参数和getopt模块详解

    FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...

  9. Python 命令行参数和getopt模块详解

    有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

随机推荐

  1. hdu 3804 树链剖分

    思路:将边权排序,然后插入线段树,这样就可以直接用二分查找确定答案. #pragma comment(linker, "/STACK:1024000000,1024000000") ...

  2. js使用CSS将图片转换成黑白(灰色、置灰)

    详细内容请点击 可能早就知道,像汶川这种糟糕的日子网站全灰在IE下是可以轻松实现的(filter: gray;),不过,当时,其他浏览器是无解的. 不过,时代发展,如今,CSS3的逐步推进,我们也开始 ...

  3. ASP.NET 窗体间传值实现方法详解

    假设ParentForm.aspx 页面上有TextBox1文本框和Open按钮点击Open按钮弹出SubForm.aspx,SubForm.aspx页面上有TextBox1文本框和Close按钮点击 ...

  4. C#中Messagebox.Show()常用参数用法详解

    声明:IWin32Window owner   ,  HelpNavigator navigator ,    string keyword 上面的三个参数类型不是很了解.没有做讨论. 等以后了解多了 ...

  5. Oracle中建立物化视图报错

    Oracle中建立物化视图报错 今天在建立视图的时候,报了一个错:ORA-01723: zero-length columns are not allowed. 建视图的语句: create mate ...

  6. 2015-0306—DataLList

    DataList具有repeater的所有功能,不同的是DataList自动将模板绘制成为一个表格,每一行数据都绘制成<tr>. 一.SQL的准备工作: 按照以下代码创建: create ...

  7. Angular实现数据绑定,它实现原理是什么?

    简单的来说,就是给每个需要绑定的元素加上$watcher,缓存下oldValue,然后定时遍历所有的$watcher,比较newValue和oldValue,如果变化了就做更新的操作.

  8. 第一章 C++简介

    第一章  C++简介 1.1  C++特点 C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言,C++模板支持的泛型编程. 1.2  C语言及其编程 ...

  9. 【风马一族_Android】Android 前端内容

    Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...

  10. centos6.5安装flume

    这里安装flume是因为游戏业务日志搜集和分析用的 1.安装java 环境rpm -ivh jdk-8u51-linux-x64.rpm Preparing... ################## ...