getopts的使用
1. 使用场景
getopts
是linux系统中的一个内置变量,一般用在循环中。每当执行循环时,getopts都会检查下一个命令选项,如果这些选项出现在option中,则表示是合法选项,否则不是合法选项。并将这些合法选项保存在VARIABLE
这个变量中。
2. 命令语法
语法
getopts [option[:]] [DESCPRITION] VARIABLE
option:表示为某个脚本可以使用的选项
":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中
此命令包含两个内置变量,及OPTARG和OPTIND
OPTARG:将选项后面的参数(或者描述信息DESCPRITION)保存在这个变量当中
OPTIND:表示命令行的下一个选项或参数的索引(文件名不算选项或参数)
#!/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
执行脚本时,显示的结果如下
[root@localhost ~]# ./test -d 'nice' fixnale
The options is d
nice
3
fixnale
显示信息说明如下
当输入 -d
时,$OPT=d,$OPTARG='nice',因此就会显示d)...这一部分的信息。
由于这里有一个选项(-d)和一个参数('nice'),$OPTIND指向命令行中下一个选项或参数的索引位置,因此这里即为3。
shift $[$OPTIND-1]表示将文件名前面的选项和参数踢掉
3. 使用实例
例子 1:使用 getopts
命令获取参数
#!/bin/bash
while getopts a:b:c:d opts; do
case $opts in
a) a=$OPTARG ;;
b) b=$OPTARG ;;
c) c=$OPTARG ;;
d) d=$OPTARG ;;
?) ;;
esac
done
echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"
exit 0
执行输出
[root@domain ~]# bash test.sh -a 1 -b 2 -c 3 -d 4
a=1
b=2
c=3
d=
option_string a:b:c:d
a,b,c后都有:,d后没有:
所以可以获取到a,b,c的值
例子2:option_string前加:
上例中,如果a,b,c任意一个没有传值,将会提示出错。例如 -c 不传值。
[root@domain ~]# bash t.sh -a 1 -b 2 -c
t.sh: option requires an argument -- c
a=1
b=2
c=
d=
我们在 option_string
前加上:
,则可以屏蔽这个错误。
#!/bin/bash
while getopts :a:b:c:d opts; do
case $opts in
a) a=$OPTARG ;;
b) b=$OPTARG ;;
c) c=$OPTARG ;;
d) d=$OPTARG ;;
?) ;;
esac
done
echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"
exit 0
执行输出
bash test.sh -a 1 -b 2 -c
a=1
b=2
c=
d=
在option_string
前加上:
,可以屏蔽缺失传值的错误,但如果缺失的是前面选项的值,那么获取到的值将会错误。
例如缺失a
的传值,命令会把-a
后的-b
作为了-a
的值,导致错误。
[root@domain ~]# bash t.sh -a -b 2 -c 3
a=-b
b=
c=
d=
对于没有传值的选项,选项名称也不要加入命令行中,例如a
不传值,则-a
不要加入命令行。
[root@domain ~]# bash t.sh -b 2 -c 3
a=
b=2
c=3
d=
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2018-06-25 16:29 PM