getopts [option[:]] [DESCPRITION] VARIABLE option:表示为某个脚本可以使用的选项 ":" 冒号如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION) VARIABLE:表示将某个选项保存在变量VARIABLE中 getopts是linux系统中的一个内置变量,一般用在循环中。每当执行循环时,getopts都会检查下一个命令选项,如果这些选项出现 在option中,则表示是合法选项,否则不是合法选项。并将这些合法选项保存在VARIABLE这个变量中。 getopts还包含两个内置变量,及OPTARG和OPTIND OPTARG 就是将选项后面的参数(或者描述信息DESCPRITION)保存在此变量当中。 OPTIND 这个表示命令行的下一个选项或参数的索引(文件名不算选项或参数) while getopts ":a:bc:" opt 第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数。 $OPTARG 存储相应选项的参数,如下例中的11、5; $OPTIND 总是存储原始$*中下一个要处理的选项(不是参数,而是选项,此处指的是a,b,c这三个选项,而不是那些数字,当然数字 也是会占有位置的)位置。 optind初值为1,遇到"x",选项不带参数,optind+=1;遇到"x:",带参数的选项,optarg=argv[optind+1],optind+=2; 举例: [root@hdc_1 software]# vim getopts.sh #!/bin/bash echo $* while getopts ":a:bc:" opt do case $opt in a) echo $OPTARG $OPTIND;; b) echo "b $OPTIND";; c) echo "c $OPTIND";; ?) echo "error" exit 1;; esac done 执行:sh getopts.sh -a 11 -b -c 5 结果: -a 11 -b -c 5 11 3 b 4 c 6 解释: 第一行输出echo $* 第二行,optind初值为1,选项-a的参数为11,下一个要处理的选项-b位置为3(即OPTIND=3),所以输出:11 3; 第三行,然后-b要处理的下一个选项-c位置为4,所以输出:b 4; 第四行,再者-c有参数,所以下一个要处理的位置+2(即为6,照着所有参数也数的出来下一个参数即为6,因为如果有下一个参数那么一定是在参数值5之后的),所以输出:c 6; 注:选项参数的格式必须是 -d val,而不能是中间没有空格的-dval 【如-d 10 不能是-d10】 getopts是对脚本参数的校验