shell读取配置文件的方式sed命令详解

 更新时间:2023年04月14日 14:19:04   作者:霜学  
在编写启动脚本时,涉及到读取配置文件,特地记录下shell脚本读取启动文件的方式,这篇文章主要介绍了shell读取配置文件-sed命令,需要的朋友可以参考下

在编写启动脚本时,涉及到读取配置文件,特地记录下shell脚本读取启动文件的方式。主要提供两种格式的读取方式,方式一配置文件采用“[]”进行分区,方式二配置文件中需要有唯一的配置项名称。

配置文件格式如下:

# cat -n config.ini
 #MYSQL配置项
 [MYSQL]
 DB_HOST=192.168.0.1
 DB_PORT=3306
 DB_USER=root
 DB_PASSWD=mysql1234
 DB_NAME=system_manager1

 #MYSQL_1配置项
 [MYSQL_1]
 MYSQL_DB_HOST=192.168.0.2
 MYSQL_DB_PORT=2200
 MYSQL_DB_USER=root
 MYSQL_DB_PASSWD=mysql123456
 MYSQL_DB_NAME=bigdata1
 MYSQL_INIT_SQL='set slave;stop backup;'

 #REDIS配置项
 [REDIS]
 DB_HOST=192.168.0.1
 DB_PORT=6379
 DB_ID=4
 DB_PASSWD=redis1234

方式一:先试使用grep获取配置项的开始行、结束行。

# grep -n -E '^\[' config.ini |grep -A 1 "\[MYSQL\]"|awk -F ':' '{print $1}'|xargs
2 10

# grep -n -E '^\[' config.ini |grep -A 1 "\[REDIS\]"|awk -F ':' '{print $1}'|xargs
19

在使用sed根据开始行、结束行获取实际配置

# sed -n "2,10 s/DB_HOST=//p" config.ini
192.168.0.1

# sed -n "19,$ s/DB_PORT=//p" config.ini
6379

方式二:使用正则匹配唯一的配置项名称,并显示实际配置

# sed -r -n 's/(^MYSQL_INIT_SQL=)(.*)$/\2/p' config.ini
'set slave;stop backup;'

# sed -r -n 's/(^MYSQL_DB_HOST=)(.*)$/\2/p' config.ini
192.168.0.2

完整脚本如下:

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

exit_script(){
   exit 1
}

if [ "$#" = 0 ]; then
    echo "参数错误,命令格式为:    ./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}

实际执行结果:

# ./config.sh config.i
config.i文件不存在,请检查配置文件是否存在

# ./config.sh config.ini
MYSQL_DB_HOST=192.168.0.2
MYSQL_DB_PASSWD=mysql1234
MYSQL_DB_USER=root
REDIS_DB_HOST=192.168.0.1
REDIS_DB_PASSWD=redis1234
-----------------分割线-------------
使用sed读取配置:MYSQL_DB_HOST=192.168.0.2
使用sed读取配置:MYSQL_DB_NAME=bigdata1
使用sed读取配置:MYSQL_INIT_SQL='set slave;stop backup;'

到此这篇关于shell读取配置文件-sed命令的文章就介绍到这了,更多相关shell读取配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux中查看服务器内存/CPU/网络占用情况的命令

    Linux中查看服务器内存/CPU/网络占用情况的命令

    这篇文章主要为大家整理了一些Linux中查看服务器内存、CPU和网络占用情况的命令,文中的示例代码简洁易懂,需要的小伙伴可以参考一下
    2023-08-08
  • Linux logrotate日志切割安装配置说明

    Linux logrotate日志切割安装配置说明

    这篇文章主要为大家介绍了Linux logrotate日志切割的安装配置说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 3个备份系统文件并邮件发送的Shell脚本分享

    3个备份系统文件并邮件发送的Shell脚本分享

    这篇文章主要介绍了3个备份系统文件并邮件发送的Shell脚本分享,3个脚本分别对应了普通需求脚本、推荐脚本、大文件需求脚本,需要的朋友可以参考下
    2014-09-09
  • 基于Shell中for循环的几个常用写法分享

    基于Shell中for循环的几个常用写法分享

    今天小编就为大家分享一篇基于Shell中for循环的几个常用写法分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Linux实现压缩文件的生成与查看的常用命令总结

    Linux实现压缩文件的生成与查看的常用命令总结

    如果你是后端程序员,我想你一定见过*.tar.gz、*.zip、*.jar后缀的文件吧,这些都是压缩文件,那这些文件都是怎么生成的,又有哪些关键区别呢?本文将带你一起了解这些文件和配套的操作命令,以及其经常使用的场景
    2022-09-09
  • Linux中修改文件权限chmod命令详解

    Linux中修改文件权限chmod命令详解

    在Linux系统中,chmod命令用于更改文件或目录的权限,它可以授予或撤销对文件的读取、写入和执行权限,本文给大家详细的介绍了Linux修改文件权限chmod命令用法,需要的朋友可以参考下
    2023-08-08
  • awk区间取值的例子

    awk区间取值的例子

    awk区间取值的例子,匹配某一区间内的值,有需要的朋友不妨参考下
    2013-02-02
  • Shell+Linux命令实现日志分析

    Shell+Linux命令实现日志分析

    这篇文章主要介绍了Shell+Linux命令实现日志分析,本文给出了结合grep命令、awk命令等实现了几个常用的日志分析统计长命令,需要的朋友可以参考下
    2014-08-08
  • 用Shell脚本快速搭建Ubuntu下的Nodejs开发环境

    用Shell脚本快速搭建Ubuntu下的Nodejs开发环境

    这篇文章主要介绍了用Shell脚本快速搭建Ubuntu下的Nodejs开发环境的方法,需要的朋友可以参考下
    2014-03-03
  • shell函数内调用另一个函数(不带返回值和带返回值)

    shell函数内调用另一个函数(不带返回值和带返回值)

    本文主要介绍了shell函数内调用另一个函数(不带返回值和带返回值),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论