本博客欢迎转发,但请保留原作者信息!
新浪微博:@孔令贤HW;
博客地址:http://blog.youkuaiyun.com/lynn_kong
内容系本人学习、研究和总结,如有雷同,实属荣幸!
在OpenStack安装Keystone时,最后会执行脚本向Keystone添加租户、用户、角色、service以及服务端点等信息,而这个脚本是由开源社区提供的,以前自己只是直接将脚本拿来执行,今天再次执行时出了问题,于是看了下其中的添加endpoint的脚本。在看的过程中发现其中有调用getopts方法,以前没用过,在此记下,以备查看。
代码片段如下:
while getopts "u:D:p:m:K:R:E:T:vh" opt; do
case $opt in
u)
MYSQL_USER=$OPTARG
;;
D)
MYSQL_DATABASE=$OPTARG
;;
p)
MYSQL_PASSWORD=$OPTARG
;;
m)
MYSQL_HOST=$OPTARG
;;
K)
MASTER=$OPTARG
;;
R)
KEYSTONE_REGION=$OPTARG
;;
E)
export SERVICE_ENDPOINT=$OPTARG
;;
T)
export SERVICE_TOKEN=$OPTARG
;;
v)
set -x
;;
h)
cat <<EOF
Usage: $0 [-m mysql_hostname] [-u mysql_username] [-D mysql_database] [-p mysql_password]
[-K keystone_master ] [ -R keystone_region ] [ -E keystone_endpoint_url ]
[ -T keystone_token ]
Add -v for verbose mode, -h to display this message.
EOF
exit 0
;;
\?)
echo "Unknown option -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument" >&2
exit 1
;;
esac
done
其实getopts函数就是用来处理命令行中传递进来的参数。
getopts 有两个参数,第一个参数是一个字符串,包括字符和“:”符号,每一个字符都是一个有效的选项,如果字符后面带有“:”,表示这个字符有自己的参数。getopts从命令中获取这些参数,并且删去了“-”,并将其赋值在第二个参数中,如果带有自己参数,这个参数赋值在“OPTARG”中。
这里变量$OPTARG存储相应选项的参数,而$OPTIND总是存储原始$*中下一个要处理的元素位置。
while getopts ":a:bc" opt #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数
比如在命令行执行: sh XXX.sh -u root -D nova,那么MYSQL_USER这个变量就会被赋值为root,而MYSQL_DATABASE变量被赋值为nova。