初识getopt

简介: 笔记

初识getopt


1· getopt 在#include

声明如下:

1.int getopt(int argc, char * const argv[], const char *optstring);

argc,argv是main函数传进的参数

argc —参数个数

argv —参数

optstring —由所有合法的“可选字符”所组成的字符串


optstring详解:
  常规形式: “ab:c::”
  1. 选项后不带 : 表示其后不跟参数
  2. 选项后带一个 : 表示其后必须跟一个参数,且参数紧跟在选项后面,或以空格隔开
  3. 选项后带两个 : 表示其后必须跟一个参数,且参数必须紧跟选项后
  4. 这些选项后的参数的指针会赋给optarg


2· getopt()对错误命令行参数信息的输出

1.这种错误要么是命令行选项无效,要么是缺少选项参数。正常情况下,getopt()会为这两种情况输出自己的出错信息,并且返回’?'。

2.如果不希望输出任何错误信息,或更希望输出自定义的错误信息。可以采用以下两种方法来更改getopt()函数的出错信息输出行为:

1.“无效选项” —— getopt()返回’?',并且optopt包含了无效选项字符。

2.缺少选项参数” —— optstring第一个参数是“:”则返回“:”,否则返回“?”。返回“?”不易和无效选项的情况区分。

optstring第一个字符:

“+” : 遇到非法选项停止

“-” : 每个非选项argv将被处理为一个字符代码1的选项参数

“:” : 判别选项及选项参数,并能屏蔽错误提示

3· getopt设置的四个全局变量

2.extern char *optarg;

optarg ----- 指向当前选项参数(如果有)的指针


3.extern int optind, opterr, optopt;

1.optind------再次调用getopt()时的下一个argv指针的索引号。当getopt()在while循环中使用时,循环结束后,剩下的字串视为操作数,在argv[optind]至argv[argc-1]中可以找到。


2.opterr------这个变量非零时,向stderr打印错误,默认为1。getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。


3.optopt------最后一个未知选项。当发现无效选项字符之时,getopt()函数或返回’?‘字符,或返回’:'字符,并且optopt包含了所发现的无效选项字符。


4. 常规用法

while((ch = getopt(argc, argv, "ab:c::")) != -1) {
  opterr = 0; // 不让报错误信息
  switch(ch) {
    case 'a' : break;
    case 'b' : break;
    case 'c' : break;
    default  : break;
  }
 }

5. 其他说明

getopt

函数说明 getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的。参数 optstring为选项字符串, 告知 getopt()可以处理哪个选项以及哪个选项需要参数,如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果在处理期间遇到了不符合optstring指定的其他选项getopt()将显示一个错误消息,并将全域变量optopt设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。

6. Linux法宝

详细说明参考man手册 man 3 getopt


7. 第一篇文章,记录我的开始!!!


相关文章
|
Unix Shell
shell编程——getopt
写shell脚本的时候,通过while、case、shift来设计脚本的命令行选项是一件比较麻烦的事,因为Unix命令行的选项和参数自由度很高,支持短选项和长选项,参数可能是可选的,选项顺序可能是无所谓的,等等。
2786 0
|
Shell 索引 Python