Linux程序设计-getopt处理命令行参数

Linux中,对于多数程序,都能够接受命令行选项,进行调用交互。具有可靠的复杂命令行参数处理机制,会使得程序健壮性更强,更好用。而getopt()是一个专门设计来处理命令行参数的库函数,简单而易用。

1.命令语法格式

命令的格式:
COMMAND OPTIONS ARGUMENT
命令 选项 参数
COMMAND:本次想要执行的操作,想要发起的进程
内部命令:也叫内建命令或内置命令,直接内建与shell的命令
外部命令:通过安装某些应用程序而安装的命令
OPTIONS:修正命令的执行效果的组成部分
短选项:
-CHAR
-a,-b,-i,…
某些特殊的命令还有特殊的短选项:
+CHAR
+C,…
当同时使用多个短选项时,可以将其合并书写,如:
-a -b -i <=>-abi
长选项:
–WORD
–help,–all,–verbose,–list,…
注意:当一个命令中同时有多个长选项时,不可以合并书写;
注意:
1、有些选项,其选项本身需要参数;
2、有些特殊的命令在写选项时,可以不写“-”;有些特殊的命令,在写选项时,一 定不能写“-”;
3、有些特殊命令的长选项,只能使用一个“-”;
ARGUMENT(PARAMETERS):此次执行命令的操作目标的对象
注意:1、有些命令无须写参数;
2、有些命令必须写参数;
3、有的命令必须写多个参数;
对于整个命令格式:
注意:1.在书写命令格式的时候,COMMAND、OPTIONS、AGUMENT之间必须使用至少一个空白字符进行间隔;
2.有些命令在执行的时候,OPTIONS和AGUMENT可以交换位置;
3.由于文件系统的限制,导致命令中的COMMAND部分、OPTIONS部分、AGUMRNT部分必须区分大小写;

2.基本的命令行处理技术

C 程序通过 argc 和 argv 参数访问它的命令行参数。argc 是整型数,表示参数的个数(包括命令名):

int main(int argc, char*argv[]) 
{
   
 	…… 
}

当 C 运行时库的程序启动代码调用 main() 时,已经对命令行进行了处理。argc 参数包含参数的计数值,而 argv 包含指向这些参数的指针数组。argv[0]是程序名。

3.命令行参数解析函数(短参数) —— getopt()

Linux下命令行解析函数getopt.
原型:
int getopt(int argc,char *argv[],const char *optstring);
参数:
agrc:命令行参数个数
argv[]:命令行参数数组
optstring:命令行参数选项

getopt调用一次将返回第一个选项,再次调用将返回下一个选项并设置相应的全局变量,不再识别返回-1:
optarg–指向当前选项参数的指针
optind–成功调用一次指向下一个argv指针的索引
optopt–最后一个未知选项,默认为0,出错为出错时的选项
opterr–全局变量默认为1,控制错误信息的输出,改为0则不输出

optstring注意:a: b:c::e
a b c d e表示命令行的 -a -b -c -d -e选项; :和::表示选项后有参数,e后边并没有参数。
:参数在选项后有一个空格或者挨着; ::可省略参数或者参数紧挨着选项 。

#include<stdio.h>
#include<unistd.h>
#include<string.h>
 
//int opterr=0;//控制错误信息0表示关闭
int main(int argc,char *argv[]){
   
	int ch;
	printf("命令行参数个数:argc=%d\n",argc);
	
	for(int i=0;i<argc;i++){
   
		printf("命令行参数:argv[%d]=%s\n",i,argv[i]);
	}
	
	ch=getopt(argc,argv,"a:b::c:d");
	while(ch!=-1){
   
		switch(ch){
   
			case 'a':printf("选择a选项:ch=%c,optind=%d,optarg=%s,opterr=%d,optopt=%d\n",ch,optind,optarg,opterr,optopt);break;
			case 'b':printf("选择b选项:ch=%c,optind=%d,optarg=%s,opterr=%d,optopt=%d\n",ch,optind,optarg,opterr,optopt);break;
			case 'c':printf("选择c选项:ch=%c,optind=%d,optarg&
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值