有关shell脚本中用getopts获取参数的方法,getopts语句获取和处理命令行选项中的参数,有关getopts参数语句的用法。
标准UNIX命令在执行时都具有相同的命令行格式:
如果在执行Shell程序也采用上述格式,Bourne Shell中提供了一条获取和处理命令行选项的语句,即getopts语句。
其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同 option_string相比较。
有时选项中还带一个值,getopts命令同样也支持这一功能。
若该值存在,那么将被存在一个特殊的变量OPTARG中。
optstring option字符串,会逐个匹配
varname 每次匹配成功的选项 arg 参数列表,没写时它会取命令行参数列表 $OPTIND 特殊变量,option index,会逐个递增, 初始值为1 $OPTARG 特殊变量,option argument,不同情况下有不同的值
细则1: 当optstring不以”:“开头,invalid option错误和miss option argument错误都会使varname被设成?, $OPTARG是出问题的option(在我的fedora系统里测试OPTARG为空).
细则2:
复制代码代码示例:
#!/bin/bash
if [[ $# -lt 1 ]];then echo "USAGE:`basename $0` [-a] [-b value] [-c]" exit 1 fi while getopts :ab:c name do case $name in a) aflag=1 echo "a" ;; b) bflag=1 if [[ ${OPTARG:0:1} = "-" ]]; then echo "invalid parameter of $OPTARG" exit 1 fi bval=$OPTARG ;; c) cflag=1 echo "c" ;; \?) echo "Invalid option :`basename $0` [-a] [-b value] [-c]" exit 1 ;; :) echo "$0:Must supply an argument to -$OPTARG." exit 1 ;; esac done echo $bval 在getopts分析选项时,如果-b后面不带参数,直接跟-c的话,那么-c将作为-b的参数。
例子(脚本为getopt):
复制代码代码示例:
#/bin/bash
echo $0 echo $* while getopts ":a:bc" opt do case $opt in a ) echo $OPTARG echo $OPTIND;; b ) echo "b $OPTIND";; c ) echo "c $OPTIND";; ? ) echo "error" exit 1;; esac done echo $OPTIND echo $* shift $(($OPTIND - 1)) echo $* echo $0 运行sh getopt.sh -a 12 -b -c 34 -m
输出:
结论: 另外,unset OPTIND 可以解决shell脚本的函数中使用getopts。 (责任编辑:IT) |