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]。