如何从标准输入流中提取参数?

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
没有评论

发表回复

Bash
如何自动根据职位设置NextCloud用户配额?

1 前言 一个问题,一篇文章,一出故事。 今天更新一个自动根据AD中的职位(title)设置Next …

Bash
如何在远程主机执行函数?

1 前言 一个问题,一篇文章,一出故事。 笔者今天想在远程机器执行本地脚本定义的函数,于是整理当前章 …

Bash
如何实现监视多台服务器的日志?

1 前言 一个问题,一篇文章,一出故事。 今天遇到需要根据PostFix的特定邮箱地址触发一个电话报 …