Bash
1 前言
一个问题,一篇文章,一出故事。
今天需要实现提取配置文件的数据库参数,基于非本地主机的考量,于是将函数设计成从保准输入流中提取。
2 最佳实践
2.1 创建范例配置文件
cat /etc/keycloak/keycloak.conf
可见如下配置,
# Database db = mariadb db-username = keycloak db-password = keycloakpwd db-url = jdbc:mariadb://rhbkdb01.cmdschool.org:3306/keycloak?characterEncoding=UTF-8
2.2 创建函数脚本
vim ~/scripts/getDataBaseConf.sh
加入如下配置,
#/bin/bash
sourcekeycloakConf="/etc/keycloak/keycloak.conf"
getDataBaseConf() {
local conf
conf=$(cat)
dbType=$(echo "$conf" | awk -F= '/^[[:space:]]*db[[:space:]]*=/{gsub(/[ \t]/,"",$2);print $2}')
dbUser=$(echo "$conf" | awk -F= '/^[[:space:]]*db-username[[:space:]]*=/{gsub(/[ \t]/,"",$2);print $2}')
dbPass=$(echo "$conf" | awk -F= '/^[[:space:]]*db-password[[:space:]]*=/{gsub(/[ \t]/,"",$2);print $2}')
dbUrl=$(echo "$conf" | awk -F= '/^[[:space:]]*db-url[[:space:]]*=/{sub(/^[ \t]+/,"",$2);print $2}')
if [[ $dbUrl =~ jdbc:[^:]+://([^:/]+):([0-9]+)/([^?]+) ]]; then
dbHost="${BASH_REMATCH[1]}"
dbPort="${BASH_REMATCH[2]}"
dbName="${BASH_REMATCH[3]}"
fi
echo "dbType:$dbType"
echo "dbUser:$dbUser"
echo "dbPass:$dbPass"
echo "dbHost:$dbHost"
echo "dbPort:$dbPort"
echo "dbName:$dbName"
}
cat "$sourcekeycloakConf" | getDataBaseConf
2.3 测试函数脚本
bash ~/scripts/getDataBaseConf.sh
没有评论