返回顶部
首页 > 资讯 > 操作系统 >shell读取配置文件的方式sed命令详解
  • 341
分享到

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

shell读取配置文件shellsed命令 2023-04-14 13:04:19 341人浏览 八月长安
摘要

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

在编写启动脚本时,涉及到读取配置文件,特地记录下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
-----------------分割线---

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

--结束END--

本文标题: shell读取配置文件的方式sed命令详解

本文链接: https://lsjlt.com/news/201544.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作