首页 > 系统相关 >shell读取配置文件-sed命令

shell读取配置文件-sed命令

时间:2023-04-11 12:14:42浏览次数:42  
标签:shell 配置文件 REDIS DB HOST sed MYSQL config

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

 

标签:shell,配置文件,REDIS,DB,HOST,sed,MYSQL,config
From: https://www.cnblogs.com/qiuxiao/p/17305725.html

相关文章

  • 迁移学习《Cluster-Guided Semi-Supervised Domain Adaptation for Imbalanced Medica
    论文信息论文标题:Cluster-GuidedSemi-SupervisedDomainAdaptationforImbalancedMedicalImageClassification论文作者:S.Harada,RyomaBise,KengoAraki论文来源:ArXiv2March2023论文地址:download 论文代码:download视屏讲解:click1摘要一种半监督域自适应方法,......
  • 使用vCenter的主机配置文件重置ESXi主机密码,无需重启
    说在前面ESXi主机多次输入用户名密码错误之后,账号会被锁定900秒(15分钟),在此期间即使输入了正确的密码也不会进入到系统里;(而且会导致计时器重置,不妨等一等)前言在日常过程中由于配置好ESXi主机后很久不登录,或者更改密码时疏忽导致改过的密码怎么输入都不对,这个时候肯定......
  • 异常检测 | 迁移学习《Anomaly Detection in IR Images of PV Modules using Supervis
    论文信息论文标题:AnomalyDetectioninIRImagesofPVModulesusingSupervisedContrastiveLearning论文作者:AbhayRawat, IshaDua, SauravGupta, RahulTallamraju 论文来源:LukasBommes,MathisHoffmann,ClaudiaBuerhop-Lutz,TobiasPickel,JensHauch,Christ......
  • 常见webeshell工具流量分析
    中国菜刀虚拟机使用仅主机模式,开启apache服务,使用wireshark对此网卡进行抓包  追踪http数据流  base64解码得出<?php@ini_set("display_errors","0");@set_time_limit(0);if(PHP_VERSION<'5.3.0'){@set_magic_quotes_runtime(0);};echo("X@Y&qu......
  • shell 变量赋值
    shell变量赋值1.read进行赋值  read的脚本中示例语法[root@localhost~]#vimread-1.sh[root@localhost~]#catread-1.sh#!/bin/bashread-p"请输入一个值"Varecho"您输入的变量值为$Var"[root@localhost~]#shread-1.sh请输入一个值oldboy您输入的变量值为old......
  • shell简介
     1.什么是Shellshell就是一个命令解释器。shell分为交互式shell和非交互式shell.交互式shell就是命令行上一条一条命令的执行。非交互式shell就是以脚本的方式运行。通过变量$-来查看是否是交互式或非交互式shell[root@localhost~]#echo$-    #命令行上的执......
  • Linux学习——shell
    Linuxshell语法转义字符\:\后面的一个字符按照其字面意思解释“”:双引号中的内容除$、`、“之外的任何字符的字面解释‘’:单引号中除'以外的任何字符按其字面解释shell变量环境变量:标准变量,通常由管理员定义,用来保存系统必需内容局部变量:由用户定义和控制export......
  • powershell-json文件解析
    .psobject.properties.name可以获取当前节点下的name(***)而.***获取该name冒号后的内容$path="C:\Users\2\Desktop\R360_TCM_Report_Annie\Local\AnnieCaseReport.json"#$path="C:\Users\2\Desktop\DDDDD\De1.json"$content=(Get-Content$path-Encod......
  • nn.PairwiseDistance
    nn.PairwiseDistance是PyTorch中的一个计算两个张量之间的距离(distance)的函数。它可以用于计算两个向量之间的欧氏距离、曼哈顿距离等。该函数的实现基于PyTorch的nn.Module模块,因此可以方便地集成到神经网络中,并且支持自动求导。以下是一个使用nn.PairwiseDistance计算两个向量之......
  • Linux sed 命令
    Linuxsed命令非常重要,今天海外项目部署正好用到,配置文件中https全部修改为httpLinuxsed命令是利用脚本来处理文本文件。sed可依照脚本的指令来处理、编辑文本文件。Sed主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。语法sed[-hnV][-e<scri......