getopts 命令
背景:
希望实现 test.sh -h 127.0.0.1 -p 6379
格式的脚本调用
实现:
getopts
#!/bin/bash
# 语法格式 getopts optstring name [arg...]
# 如果选项字符后面跟着一个冒号,则表明该字符选项需要一个命令行参数
# ":h:p:s"以冒号开头,则表明当命令行出现了optstring中没有的参数将不会提示错误信息
# 定义默认值
host="127.0.0.1"
port="6379"
msg="False"
# 帮助函数
help(){
cat <<EOF
usage:
$0 -h 127.0.0.1
$0 -p 6379
$0 -s
$0 -h 127.0.0.1 -p 6379 -s
EOF
}
# 处理命令行参数
while getopts ":h:p:s" opt; do
case $opt in
# getopts命令每次被调用时,它会将下一个选项字符放置到变量中,OPTARG则可以拿到参数值
h)
host=$OPTARG
;;
p)
port=$OPTARG
;;
s)
msg="True"
;;
*)
echo "Invalid option: -$OPTARG" >&2
help
exit 1
;;
esac
done
# 输出结果
echo "${host}:${port} ${msg}"
root@master01:~# bash 1.sh -h 127.0.0.1 -p 6379 -s
127.0.0.1:6379 True