shell getopts
getopts
getopts是一个命令行解析工具,是shell script支持参数解析。
getopts用法:
getopts optstring name [args]
说明:
optstring:表示有那些选项和参数(选项后加":"表示选项后面需要加参数)。
name: 存放选项的变量。
Example:
shell script解析命令行
#!/bin/bash
status=off #定义变量status,初始值设置为off
filename="" #定义变量filename,用于保存选项参数(文件)
output="" #定义变量output,用于保存选项参数(目录)
usage () { #定义函数Usage,输出脚本使用方法
echo "myscript [-h] [-v] [-f <filename>] [-o <filename>]"
}
while getopts :hvf:o: varname
# getopts: 此脚本有-h、-v、-f、-o四个选项,-f和-o后面需要跟参数.
do
case $varname in
h)
usage
exit 0
;;
v) status=on;;
f)
filename=$OPTARG #将选项的参数赋值给filename
if [ ! -f $filename ];then #判断选项所跟的参数是否存在且是文件
echo "the source file $filename not exist!"
exit
fi
;;
o)
output=$OPTARG #将选项参数赋值给output
if [ ! -d $output ];then #判断选项参数是否存在且是目录
echo "the output path $output not exist"
exit
fi
;;
:) #当选项后面没有参数时,varname的值被设置为(:),OPTARG的值被设置为选项本身
usage
err 1 "the option -$OPTARG require an arguement" # 提示用户此选项后面需要一个参数
;;
?) #当选项不匹配时,varname的值被设置为(?),OPTARG的值被设置为选项本身
usage
err 1 "Invaild option: -$OPTARG" # 提示用户此选项无效
;;
esac
done
执行结果:
$ ./test.sh -vf ./test -o ./abc The source file ./test doesn't exist!
说明:
hvfo:是选项
第一个":":getopts会区分invalid option错误和miss option argument错误;
当为invalid option时,name会被设成"?",$OPTARG时有问题的选项;
当为miss option argument时,name会被设成":",$OPTARG时有问题的选项。
如果optstring不是以":"号开头,invalid option和miss option argument都会时name变成"?",$OPTARG时有问题的选项。所以建议选项以":"开头。
其中hv为普通选项,可以不带参数值,如果带了无法获取;fo为后面带参数的值,参数值会存放在OPTARG这个变量中;选项赋值给[args]。

浙公网安备 33010602011771号