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日

相关文章

  • Centos系统中用mock构建rpm的方法

    下面是CentOS系统中使用mock构建rpm的方法的完整攻略。 安装Mock Mock是一个用于构建rpm包的工具,CentOS系统中可以通过以下命令安装: sudo yum install mock 配置Mock Mock的默认配置文件是位于/etc/mock下的default.cfg文件,可以在该文件中进行Mock的配置。例如可以修改以下配置项: co…

    Linux 2023年5月14日
    00
  • Linux—回写机制

    前言 当我们修改了某个文件时,被修改的内容不会直接写入磁盘中,而是会写入由内核提供的一个buffer里,那么,内核会在一个特定的时间或者机制,再将buffer中的内容写进磁盘中去,为什么要这么做?原因就是减少开销,降低磁盘的读写次数。   缓存的三种机制 一般缓存有三种机制: 1.不缓存(nowrite):这种机制是跳过缓存,直接写入磁盘中。如果进行读操作时…

    Linux 2023年4月13日
    00
  • JAVA 正则表达式陈广佳版本(超详细)

    JAVA正则表达式陈广佳版本(超详细)攻略 什么是正则表达式 正则表达式是一种由字符和运算符组成的字符模式,用于匹配一系列文本中的字符串。在JAVA中,正则表达式是使用java.util.regex包中的类进行处理。 正则表达式语法 基本元字符 . :表示任意一个字符(除了换行符)。 \ :转义字符。 []:表示一个字符集合。比如[abc]表示a或b或c。 …

    Linux 2023年5月14日
    00
  • Linux搭建python环境详解

    Linux搭建Python环境详解 概述 本文将介绍在Linux操作系统中如何搭建Python开发环境。通过本文的步骤,读者可以轻松搭建好Python环境,并且可以运行自己的Python应用。 下面将分为以下两部分讲解具体的搭建步骤: Linux操作系统安装 Python环境搭建 Linux操作系统安装 步骤一:选择Linux操作系统 首先,我们需要选择一款…

    Linux 2023年5月14日
    00
  • Linux 磁盘管理(分区、创建文件系统、挂载)

    Linux设备文件可以分为两类 b : 按块为单位,随机访问设备(块设备文件)  如:硬盘 c : 按字符为单位,线性设备(字符设备文件)  如:键盘 设备文件位于/dev下    主设备号(major number): 标识设备类型 次设备号(minor number): 标识同一类型中不同设备   创建设备文件 mknod(选项)(参数) 选项 -Z:设…

    Linux 2023年4月11日
    00
  • vmware虚拟机安装安卓Android x86的方法步骤

    VMware虚拟机安装Android x86的方法步骤 1. 准备工作 1.1 下载Android x86镜像文件 到Android x86官网(https://www.android-x86.org/download)下载适合自己电脑系统的Android x86镜像文件,一般选择 ISO Files。 示例: 举个例子,如果你的电脑为64位系统,选择下载文…

    Linux 2023年5月24日
    00
  • 详解Linux服务器状态、性能相关命令

    关于“详解Linux服务器状态、性能相关命令”的攻略,我可以如下介绍: 1. top命令 top命令可以实时查看系统的负载情况,包括CPU、内存、进程等信息。在终端中输入top命令后,会出现一个动态更新的进程列表,包含以下信息: PID:进程ID USER:进程所属用户 PR:进程的优先级 NI:nice值 VIRT:在虚拟内存中占用的空间大小 RES:已分…

    Linux 2023年5月14日
    00
  • 在Linux下搭建Git服务器步骤

    当我们需要在Linux下建立Git服务器时,可以使用以下步骤进行操作: 安装Git 在Linux服务器上安装Git命令行客户端,可以通过以下命令进行安装: sudo apt-get update sudo apt-get install git 创建Git用户 我们可以使用以下命令来创建Git用户和用户组: sudo adduser git sudo add…

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