linux下使用getopt处理命令行

时间:2021-10-14 14:30:11

        以前在linux的shell下运行程序时也带过参数,在参数的处理上是自己写个简单的解析函数来处理argv[]的,显得很麻烦而且笨拙。今天学习代码时才发现有个getopt函数可以轻松的处理命令行参数。难怪linux的那些程序的参数处理都做的很强大。比如ls -al --color=auto,ls --help。

        首先用man 3 getopt看了下函数的手册,结合附带的代码还是没能完全明白。搜了一下发现ibm的developerWorks上有一篇文章介绍的很好:使用 getopt() 进行命令行处理。这里插一句,ibm的这个站点有很多中外的工程师写的技术文章,质量都相当高的,推荐一下。看完这篇文章后,自己写了个简单的,就知道getopt如何使用的,如下:

int main( int argc, char *argv[] )
{
	int opt = 0;
	
	opt = getopt( argc, argv, "a:b::h");
	while( opt != -1 )
	{
		switch( opt )
		{
			case 'a':
				printf("a~~:%s\n",optarg);
				break;
			case 'h':
				printf("help\n");
				break;	
			case 'b':
				printf("b~~:%s\n",optarg);
			default:
				printf("def\n");
				break;	
		}
		opt = getopt(argc,argv,"a:b::h");			
			
	}
	
}

        正确的使用如下:

        bash-4.2# ./main -a 45 -h -b23
        a~~:45
        help
        b~~:23
        def

        当然,最好将help写的详细一些。

        有些参数选项后面不接冒号,有些接一个冒号,有些接两个冒号。

       

            1.单个字符,表示选项,不接参数的。
            2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
            3 单个字符后跟两个冒号,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。