在编写启动脚本时,涉及到读取配置文件,特地记录下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读取配置文件-sed命令的更多相关文章

  1. Shell读取配置文件的方法

    参考:http://www.cnblogs.com/binbinjx/p/5680214.html 做批量软件安装自动化时,都喜欢用配置文件的方式改变参数,那怎么通过shell读取配置文件的配置呢?参 ...

  2. 在shell中使用sed命令替换/为\/

    sed命令相关: https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html https://www.cnblogs.com/D ...

  3. shell 三剑客之 sed 命令详解

    sed 编辑命令 sed 编辑命令对照表 把 /etc/passwd 文件赋值到当前路径下,进行操作 cp /etc/passwd ./ cat -n passwd sed 删除操作 删除 passw ...

  4. Shell三剑客之sed命令

    Sed简介 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具,常用功能有增删改查. Sed命令执行流程 Sed语法格式 Sed [option] ‘[匹配][处 ...

  5. linux下shell脚本中sed命令的用法

    先来给一个案例: #将old.sql文件中的符号“|”替换为“,”,并保存到test.sql文件中 sed "s/|/,/g" "old.sql"> te ...

  6. shell 读取配置文件的方法

    原文地址:http://bbs.chinaunix.net/thread-3628456-1-1.html 总结地址:https://www.cnblogs.com/binbinjx/p/568021 ...

  7. linux shell中使用sed命令

    例1:批量的将变量的值代替指定文件中的指定内容. #!/bin/bash for i in {1..100} mgr_port=`expr $i + 5345` data_port=`expr $i ...

  8. 【Shell】使用sed命令替换文件中的某一行

    原始文件内容 -bash-3.2# cat configTest.xml <?xml version="1.0" encoding="UTF-8"?> ...

  9. linux shell读取配置文件

    配置文件CoverageInfo FTP_URL=ftp://svn-fb.sicent.com:21/jenkins/Jifei_Repo/OL-2/IDC_Platform/bar_seats_c ...

  10. shell 读取配置文件的用法

    https://blog.csdn.net/qq_36684665/article/details/81134179 亲测有用!

随机推荐

  1. MongoDB 相关的一些操作

    一. 在 MongoDB Compass中输入条件查询数据 {"src":"小车"}           // = 该值 {"src":{$ ...

  2. 小梅哥课程学习——LED花式玩法(从计数器器到线性序列机)——实验六

    //每隔10ms,让led灯的一个8状态循环执行一次(每个变化时间值小一点,方便测试比如设置为10us) 源代码 module counter_led_6(    clk,    reset_n,   ...

  3. StringIO 和 BytesIO

    StringIO 要把 str 字符串写入内存中,我们需要创建一个 StringIO 对象,然后像文件一样对读取内容.其中 StringIO 中多了一个 getvalue() 方法,目的是用于获取写入 ...

  4. C++ || const_cast 将const变量转为非const

    点击查看代码 #include <iostream> using namespace std; int main() { int a =5; const int* p=&a;//需 ...

  5. 记录一次MySQL主从同步

    主库配置 server-id=1log-bin=mysql-binbinlog_format=ROWbinlog_row_image=minimalbinlog-do-db=yjtb-cloud 解释 ...

  6. windows安装WinDump

    1.下载软件,放在C盘: WinDump.exehttps://www.winpcap.org/windump/install/default.htmWinPcap_4_1_3.exe(windows ...

  7. OpenStack组件说明

    1.版本对应组件 2.Juno版本的核心组件

  8. Map遍历增加key报错如何解决

    public static void main(String[] args) throws Exception{ Map<String,Object> aa=new HashMap< ...

  9. Mongodb between 时间范围

    db.getCollection("Order").find({ "Supplier.ServiceCode": "CNI", " ...

  10. 给jui(dwz)的菜单树换一套漂亮的图标

    JUI是一个免费开源的框架,在使用初期,会遇到一些麻烦,因为文档实在太少了,完全不知道从哪里入门,但是,一旦你深入学习后,你会发现,你的选择是不错的,它会提高你开发的效率,同时,你会深深爱上它. 目前 ...