shell读取配置文件的方式sed命令详解(shell读取配置文件某个变量值)干货分享

随心笔谈9个月前更新 admin
177 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

这篇文章介绍了一个名为 `config.sh` 的 bash 脚本,用于管理数据库和 Redis 的配置文件。脚本的主要功能包括: 1. **参数检查**:函数 `exit_script` 检查输入参数是否正确,并提示错误信息。2. **读取配置**:使用 `get_line_num` 和 `get_config` 函数通过 `sed` 命令动态读取配置文件中的特定参数,例如 `MYSQL_DB_HOST`、`MYSQL_DB_PASSWD`、`REDIS_DB_HOST` 等。3. **验证配置**:脚本不仅读取配置,还通过 `sed` 命令验证配置是否正确。4. **错误处理**:如果找不到指定的配置文件,脚本会提示错误信息并退出。5. **帮助信息**:脚本末尾提供了 `echo` 命令供用户查看配置文件的使用说明。 这篇文章的核心内容是通过 `sed` 命令实现的数据库和 Redis 配置管理功能,适用于需要动态配置管理的场景。脚本的结构清晰,功能完整,但需要注意其依赖的配置文件必须存在,否则会导致错误。

# cat config.sh
#!/bin/bash
set -e

exit_script(){
exit 1
}

if [ “$#”=0 ]; then
echo “参数错误,命令格式为: https://www.jb51.net/article/config.sh configfile”
exit_script
else
configPath=$1
fi

function get_line_num(){
local configKey=$1
grep -n -E ‘^\[‘ ${configPath} |grep -A 1 “\[${configKey}\]”|awk -F ‘:’ ‘{print $1}’|xargs
}

function get_config(){
#local configPath=$1
local configKey=$1
local configName=$2
local line_num=$(get_line_num $configKey)
local startLine=$(echo $line_num |awk ‘{print $1}’)
local endLine=$(echo $line_num|awk ‘{print $2}’)
if [ ${endLine} ];then
sed -n “${startLine},${endLine} s/${configName}=//p” ${configPath}
else
sed -n “${startLine},$ s/${configName}=//p” ${configPath}
fi
}

if [ -f $configPath ];then
MYSQL_DB_HOST=$(get_config MYSQL DB_HOST)
else
echo ${configPath}”文件不存在,请检查配置文件是否存在”
exit_script
fi
MYSQL_DB_PASSWD=$(get_config MYSQL DB_PASSWD)
MYSQL_DB_USER=$(get_config MYSQL DB_USER)
REDIS_DB_HOST=$(get_config REDIS DB_HOST)
REDIS_DB_PASSWD=$(get_config REDIS DB_PASSWD)

MYSQL_DB_HOST=$(sed -r -n ‘s/(^MYSQL_DB_HOST=)(.*)$/\2/p’ $configPath)
MYSQL_DB_NAME=$(sed -r -n ‘s/(^MYSQL_DB_NAME=)(.*)$/\2/p’ $configPath)
INIT_SQL=$(sed -r -n ‘s/(^MYSQL_INIT_SQL=)(.*)$/\2/p’ $configPath)

echo “MYSQL_DB_HOST=”${MYSQL_DB_HOST}
echo “MYSQL_DB_PASSWD=”${MYSQL_DB_PASSWD}
echo “MYSQL_DB_USER=”${MYSQL_DB_USER}
echo “REDIS_DB_HOST=”${REDIS_DB_HOST}
echo “REDIS_DB_PASSWD=”${REDIS_DB_PASSWD}

echo “—————–分割线————-”
echo “使用sed读取配置:MYSQL_DB_HOST=”${MYSQL_DB_HOST}
echo “使用sed读取配置:MYSQL_DB_NAME=”${MYSQL_DB_NAME}
echo “使用sed读取配置:MYSQL_INIT_SQL=”${INIT_SQL}

© 版权声明

相关文章