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

随心笔谈2年前发布 admin
180 0 0

文章摘要

这篇文章详细介绍了在Linux bash脚本中处理配置文件的方法,重点描述了如何通过脚本读取并处理MySQL和Redis的配置信息。文章首先定义了错误退出函数`exit_script`,并在命令行参数检查时调用该函数。接着,定义了两个函数`get_line_num`和`get_config`,用于定位和提取特定键值。脚本通过这些函数定位到MySQL和Redis的相关配置参数,并使用`sed`命令进行替换或删除操作。文章还详细描述了如何提取MySQL数据库名称、密码、初始化SQL语句等配置信息,并通过示例展示了脚本的具体运行流程。整体内容简明扼要,重点突出脚本的功能和实现细节,适合需要配置管理和自动化脚本处理的用户参考。

# 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}

© 版权声明

相关文章