您的位置:首页 > 运维架构 > Linux

Linux之getopt函数

2016-01-07 17:44 525 查看
getopt函数的作用是用来对命令行输入的参数进行处理。直接看例子。

1 源代码 getopt.c

#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
char optChar;
while(-1 != (optChar=getopt(argc, argv, "whn:")))
{
switch(optChar)
{
case 'w':
printf("Welcome!\n");
break;
case 'h':
printf("Hello!\n");
break;
case 'n':
printf("Hi, %s!\n", optarg);
break;
}
}
return 0;
}


2 运行结果

$ ./getopt -w

Welcome!

$ ./getopt -h

Hello!

$ ./getopt -n mjzhan

Hi, mjzhan!

$ ./getopt -hn mjzhan

Hello!

Hi, mjzhan!

3 对关键语句进行解释

 optChar=getopt(argc, argv, "whn:")

        3.1 getopt的输入参数

        getopt有三个参数,前两个不多做解释。第三个"whn:"表示可以接收的参数为w,h和n,n后面多了个冒号表示n参数需要带上相应的参数字符串,而这个参数字符串是存储在外部全局变量optarg中的。

如上例的./getopt -n mjzhan。

        3.2 getopt的返回值

        getopt每次返回一个从命令行输入的参数,在本例中将返回值赋给optChar,然后再对optChar进行判断处理,有多个参数时需要使用循环来多次调用getopt函数。

如./getopt -hn mjzhan的运行结果有两行,就是分别对h和n这两个参数执行的结果。

        当命令行输入的参数都读取完毕后,返回-1,本例中就表现为while循环退出。

经过上面的介绍,应该可以掌握getopt最基本的使用方法了。

4 参数错误处理

        有人会问,如果我输入的参数不在whn三者之一,或者我输入的n参数后面没有跟参数字符串呢?上运行示例:

$ ./getopt -j

getopt: unknown option -- j

$ ./getopt -n

getopt: option requires an argument -- n

看到没,系统给出的提示还是很friend的。但有人会说,我需要自定义的提示!好了,做两件事就可以了

        4.1 第一件事,让系统提示闭嘴

        这个很简单,将"whn:"变成":whn:"就可以了,也就是前面加个冒号,自己去试试吧,这时候系统会很安静,没有任何错误提示。

        4.2 第二件事,自定义提示

        如果getopt能够返回某两个特定的值,一个告诉我参数错误,一个告诉我参数后面没有跟参数字符串,那么自定义提示就会很简单啊,多加两个case判断嘛!

        确实有这两个返回值,参数错误的返回值是‘?',缺少参数字符串的返回值是':',那么新加的两个case如下:

case ':':
printf("Need optString!\n");
break;
case '?':
printf("Wrong opt!\n");
break;


        好了,自己去运行一下吧,这时候就会给出自定义的提示了。
        以上只是一些简单的用法,基本场合应该够了,更多的功能大家自己去研究了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: