今天主要介绍如何使用getopts工具来完善脚本命令行参数。1、getopsgetopts是一个解析脚本选项参数的工具。(1)语法格式:getopts[option[:]][DESCPRITION]VARIABLE(2)option:表示某个脚本可以使用的选项。(3)“:”:如果一个选项(option)后面出现冒号(“:”),表示这个选项后面可以跟参数(即一段描述信息DESCRIPTION)(4)VARIABLE:表示一个选项保存在变量VARIABLE中getopts是linux系统的一个内置变量,一般用在loops中间。每当执行循环执行时,getopts将检查下一个命令选项。如果这些选项出现在选项中,则说明它是合法的选项,否则就不是合法的选项。并将这些合法选项保存在变量VARIABLE中。getopts还包括两个内置变量,OPTARG和OPTIND:OPTARG是将option后面的参数(或描述信息DESCRIPTION)保存在这个变量中。OPTIND:表示命令行中下一个选项或参数的索引(文件名不是选项或参数)。初次使用需要注意以下几点:脚本位置参数会与optstring中的单个字母一一匹配。如果匹配则赋值给name,否则赋值的name为问号;optstring中的单个字母是一个选项,如果字母后加冒号,则表示该选项后跟参数,参数值将赋值给OPTARG变量;optstring中第一个是冒号,表示系统错误被拦截(test.sh:illegaloption--h);允许将选项放在一起,例如-ab2。实验(1)getops参数简单使用#!/bin/bashwhilegetopts':b:d:'OPT&>/dev/null;docase$OPTinb)echo"Theoptionsisb"echo$OPTARG;;d)echo"Theoptionsisd"echo$OPTARG;;*)echo"WrongOptions"exit7;;esac#echo$OPT#echo$OPTARGdoneecho$OPTINDshift$[$OPTIND-1]echo$1执行结果:./getopts1.sh-d'nice'fixnale说明:当输入-d时,$OPT=d,$OPTARG='nice',所以d)...这部分的信息会是显示。由于有一个选项(-d)和一个参数('nice'),$OPTIND指向下一个选项或参数在命令行中的索引位置,所以这里是3。shift$[$OPTIND-1]表示去掉文件名前面的选项和参数。(2)进一步使用getops参数#!/bin/bashecho$*whilegetopts":a:bc:"optdocase$optina)echo$OPTARG$OPTIND;;b)echo"b$OPTIND";;c)echo"c$OPTIND";;?)echo"error"exit1;;esacdoneecho$OPTINDshift$(($OPTIND-1))echo$0echo$*执行结果:./getopts2.sh-a11-b-c6解释:whilegetopts":a:bc:"opt#第一个冒号表示忽略错误;字符后的冒号表示该选项必须有自己的参数。$optarg存放对应选项的参数,如上例中的11和6;$optind总是把下一个要处理的选项存放在原来的$*(不是参数,是选项,指的是这里的a,b,c三个选项,不是那些数字,当然数字也会占位)的位置。optind初始值为1,当遇到“x”时,option没有参数,optind+=1;当遇到“x:”时,带参数的选项,optarg=argv[optind+1],optind+=2;当“xisencountered::”时,可选参数,#1和#2之一。第一行输出echo$*第二行,optind的初始值为1,选项-a的参数为11,下一个要处理的选项-b位置为3,所以输出:113;第三行,然后-b下一个要处理的选项-c位置是4,所以输出:b4;第四行,-c有参数,所以下一个要处理的位置+2,所以输出:c6;
