壳脚本中getopt如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强> 1。getops 强>
getopt是一个解析脚本选项参数的工具。
(1)语法格式:getopt(选择[:]][DESCPRITION]变量
(2)选择:表示为某个脚本可以使用的选项。
(3)“:“如果某个选项(选项)后面出现了冒号(“:”),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
(4)变量:表示将某个选项保存在变量变量中
getopt是linux系统中的一个内置变量,一般用在循环中。每当执行循环是,getopt都会检查下一个命令选项,如果这些选项出现在选项中,则表示是合法选项,否则不是合法选项。并将这些合法选项保存在变量这个变量中。
getopt还包含两个内置变量,及OPTARG和OPTIND:
- <李>
OPTARG就是将选项后面的参数(或者描述信息DESCPRITION)保存在这个变量当中。
李> <李>OPTIND:这个表示命令行的下一个选项或参数的索引(文件名不算选项或参数)
李>初次使用要注意这几点:
- <李>
脚本位置参数会与optstring中的单个字母逐个匹配,如果匹配到就赋值给名字,否则赋值名称为问号;
李> <李>optstring中单个字母是一个选项,如果字母后面加冒号,表示该选项后面带参数,参数值并会赋值给OPTARG变量;
李> <李>optstring中第一个是冒号,表示屏蔽系统错误(测试。承宪:非法选项——h);
李> <李>允许把选项放一起,例如ab
李><强> 2。实验
(1) getops参数简单使用
#!/bin/bash while getopts ':b:d:' OPT &> /dev/null;do case $OPT in b) echo "The options is b" echo $OPTARG ;; d) echo "The options is d" echo $OPTARG ;; *) echo "Wrong Options" exit 7 ;; esac # echo $OPT # echo $OPTARG done echo $OPTIND shift $[$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/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 echo $OPTIND shift $(( $OPTIND-1 )) echo $0 echo $*
执行结果:
./getopts2.sh -a 11 -b -c 6
说明:
while getopts ":a:bc:" 选择第号一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数。
- <李>
optarg美元存储相应选项的参数,如上例中的11日6;
李> <李>optind美元,总是存储原始$ *中下一个要处理的选项(不是参数,而是选项,此处指的是a, b, c这三个选项,而不是那些数字,当然数字也是会占有位置的)位置。
李>optind初值为1,遇到“x",选项不带参数,optind +=1;遇到“x:“带参数的选项,optarg=argv [optind + 1], optind +=2;遇到“x::“,可选参数,属于# 1和# 2之一。
- <李>
第一行输出echo $ *
李> <李>第二行,optind初值为1,选项——的参数为11日,下一个要处理的选项- b位置为3,所以输出:11 3;
李> <李>第三行,然后- b要处理的下一个选项- c位置为4,所以输出:b 4;