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 6.5编译安装Nginx 1.10.2+MySQL 5.5.52+PHP5.5.38

    安装依赖库 在CentOS6.5中安装Nginx、MySQL、PHP之前,需要进行依赖库的安装,具体命令如下: yum install -y gcc gcc-c++ make automake autoconf libtool pcre perl pcre-devel zlib zlib-devel openssl openssl-devel mysql-d…

    Linux 2023年5月14日
    00
  • Vulnhub Joy Walkthrough

    Recon 这台靶机对枚举的要求较高,如果枚举不出有用的信息可能无法进一步展开,我们首先进行普通的扫描。 ┌──(kali㉿kali)-[~/Labs/Joy/80] └─$ sudo nmap -sS -sV -p- 192.168.80.136 Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-10 2…

    Linux 2023年4月14日
    00
  • linux输入yum后提示: -bash: /usr/bin/yum: No such file or directory的解决方法

    当你在 Linux 系统中输入 yum 命令时,如果出现 “-bash:/usr/bin/yum:Nosuchfileordirectory” 错误提示,说明可能是 yum 命令所在的路径未被正确添加到 PATH 环境变量中。 下面是解决该问题的完整攻略: 1. 检查 yum 是否已安装 在终端中输入以下命令,检查 yum 是否存在: rpm -qa |gr…

    Linux 2023年5月14日
    00
  • Linux sar命令

    Linux sar命令的作用与使用方法 简介 sar(System Activity Reporter)是一个用于收集、报告和存储系统活动信息的命令行工具。它可以收集各种系统活动信息,如 CPU 使用率、内存使用率、磁盘 I/O、网络 I/O 等,并将这些信息存储在文件中,以供后续分析和报告。 安装 sar 命令通常包含在 sysstat 包中,因此需要先安…

    Linux 2023年5月10日
    00
  • 让Linux下的cron以秒为单位执行shell脚本的3种方法

    以下是让Linux下的cron以秒为单位执行shell脚本的3种方法的详细攻略: 方法一:使用sleep命令 使用sleep命令可以让cron以秒为单位执行shell脚本。具体步骤如下: 在shell脚本开头设置环境变量: #!/bin/bash SLEEP_DURATION=5 将你需要间隔执行的命令写入到一个循环中,并在循环内添加sleep命令: whi…

    Linux 2023年5月14日
    00
  • 在centos 7中安装配置k8s集群的步骤详解

    一、前置条件 在开始安装配置k8s集群之前,请确认以下前置条件: 在所有节点(Master和Worker)上禁用防火墙或者将必须的端口(如: 10250, 2379-2380, 6443, 10251-10252等)加入到了防火墙的白名单中。 所有节点的时间保持同步 所有节点的主机名和IP地址配置正确 二、安装Docker Kubernetes是基于Dock…

    Linux 2023年5月14日
    00
  • linux centos 7.x 安装 python3.x 替换 python2.x的过程解析

    下面是“Linux CentOS 7.x安装Python 3.x替换Python 2.x的过程解析”完整攻略。 一、准备工作 确保已安装 CentOS 7.x 操作系统 在终端中输入以下指令以升级系统: yum update -y 安装 epel 和 IUS 仓库 yum install -y epel-release yum install -y http…

    Linux 2023年5月14日
    00
  • 我使用过的Linux命令之swig – 把C/C++的代码嵌入Java等语言的开发工具

    用途说明   SWIG是Simplified Wrapper and Interface Generator的缩写,其官方站点是http://www.swig.org/。SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tc…

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