shell读取配置文件-sed命令

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

配置文件格式如下:

# cat -n config.ini
1 #MYSQL配置项
2 [MYSQL]
3 DB_HOST=192.168.0.1
4 DB_PORT=3306
5 DB_USER=root
6 DB_PASSWD=mysql1234
7 DB_NAME=system_manager1
8
9 #MYSQL_1配置项
10 [MYSQL_1]
11 MYSQL_DB_HOST=192.168.0.2
12 MYSQL_DB_PORT=2200
13 MYSQL_DB_USER=root
14 MYSQL_DB_PASSWD=mysql123456
15 MYSQL_DB_NAME=bigdata1
16 MYSQL_INIT_SQL='set slave;stop backup;'
17
18 #REDIS配置项
19 [REDIS]
20 DB_HOST=192.168.0.1
21 DB_PORT=6379
22 DB_ID=4
23 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;'

 

原文链接:https://www.cnblogs.com/qiuxiao/p/17305725.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:shell读取配置文件-sed命令 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • 虚拟机增加磁盘空间后SWAP分区不能挂载怎么办?

    如何解决虚拟机增加磁盘空间后SWAP分区不能挂载的问题? 一、问题分析: 在使用虚拟机时,如果磁盘空间不足,就需要增加磁盘空间。但是,在增加磁盘空间后,有时候我们会发现SWAP分区不能挂载。这是因为虚拟机中的SWAP分区需要重新划分,并且重新创建SWAP分区的UUID需要与/etc/fstab和/boot/grub/grub.conf中的UUID保持一致。如…

    Linux 2023年5月24日
    00
  • 1.Linux系列教程介绍

    前言 录这套教程主要帮助那些对Linux了解很少但又想做一个初步学习的小伙伴,因为我们一般在找开发相关的工作面试时偶尔也会被问到,而且做为一名开发人员如果不会操作Linux操作系统确实也有些说不过去,因为一般我们在企业中用到的中间件、服务的部署等都是在Linux上,本期教程就带着大家来入门下Linux,学习了Linux操作后大家如果以后用Mac系统也会用起来…

    Linux 2023年4月24日
    00
  • 操作系统-区分文件共享的两种方式:软链接和硬链接

    软链接与硬链接是用来干什么的呢?为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。 1.硬链接(基于索引节点的共享方式) 由于linux下的文件…

    Linux 2023年4月17日
    00
  • 搭建nextcloud私有云存储网盘的教程详解

    搭建 Nextcloud 私有云存储网盘的教程详解 什么是 Nextcloud? Nextcloud 是一款类似于 Dropbox 的私有云存储服务,可以让您在自己的服务器上存储和访问文件及资料。Nextcloud 具有丰富的功能,如文件同步、文件共享、协作编辑等,支持多种操作系统、浏览器和移动设备。 步骤一:安装 LAMP 环境 Nextcloud 需要运…

    Linux 2023年5月14日
    00
  • CentOS如果更改yum更新源详解

    非常感谢您对CentOS的关注。更改yum更新源是CentOS系统管理员常用的一项操作,它可以帮助我们更快速、更稳定地更新CentOS系统。 以下是CentOS更改yum更新源的完整攻略: 步骤一:备份原始的yum源 在更改yum更新源之前,我们首先要备份原始的yum源。这是因为如果更改文件出现问题,我们可以通过还原备份来避免潜在的风险。 打开终端,输入以下…

    Linux 2023年5月14日
    00
  • [Linux] host dig nslookup查询域名的DNS解析

    root@VM-38-204-ubuntu:~# host baidu.com baidu.com has address 220.181.57.216 baidu.com has address 123.125.114.144 baidu.com mail is handled by 15 mx.n.shifen.com. baidu.com mail i…

    Linux 2023年4月13日
    00
  • linux centos7安装mysql8的教程

    下面是“linuxcentos7安装mysql8的教程”的完整攻略: 安装MySQL8 在CentOS 7上安装MySQL8前,需要先卸载已经安装的旧版本MySQL,卸载指令如下: sudo systemctl stop mysqld sudo yum remove mysql-server mysql mysql-libs sudo rm -rf /var…

    Linux 2023年5月14日
    00
  • Linux下Apache安装/增加mod

    以下是“Linux下Apache安装/增加mod”的完整使用攻略,包含两个示例说明。 步骤 更新系统软件包。在终端中输入以下命令: bash sudo apt-get update 安装Apache。在终端中输入以下命令: bash sudo apt-get install apache2 启动Apache服务。在终端中输入以下命令: bash sudo s…

    Linux 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部