原创文章,转载请标明出处

1、shell解析配置文件基本操作

首先shell要解析的配置文件,按照一定的格式进行编写;

其次,使用shell获取要解析的模块内容;

最后,从获取的模块内容的解析出所需的value值。

如下:

配置文件db_mes.cfg包含了clickhouse与postgresql两种db的连接信息,

根据这些信息解析配置文件的内容,然后从模块的内容中获取数据库的user、password、port、database的值

db_mes.cfg

[clickhouse]

user=test

password=mytest

port=9000

database=mydb

[\clickhouse]

 

[postgresql]

user=test2

password=mytest2

port=5432

database=mydb

[\postgresql]

2、获取配置文件指定的模块section

cfg_mes.sh

section=$1

file=/home/cfg/db_mes.cfg

sed -n '/\[$section\]/,/\[\/$section\]/p'  $flile   # sed -n '/XXX/,/XXX/p' 表示从 'XXX'开始 到'XXX' 结束的所有内同。

将section使用db名称替换将打印出这个section包含的内容

sh cfg_mes.sh clickhouse

输出如下

[clickhouse]

user=test

password=mytest

port=9000

database=mydb

[\clickhouse]

3、解析section中的value信息

使用awk -F参数对获取的字符串进行split,并获取split后第二个字符完整内容

cfg_mes.sh

section=$1

pwd=$2

file=/home/cfg/db_mes.cfg

sed -n '/\[$section\]/,/\[\/$section\]/p'  $flile|grep ^$pwd|awk -F= '{print $2}'

sed -n '/\[$section\]/,/\[\/$section\]/p'  $flile|grep ^$pwd|cut -f2 -d '='

sed -n '/\[$section\]/,/\[\/$section\]/p'  $flile|grep ^$pwd|sed -n -e "s/^\($pwd=\)\([^ ']*\)\(.*\)$/\2/p"

后续测试,第三种也可以这么写,有哪位读者明白的,可以留言补充一下

sed -n '/\[$section\]/,/\[\/$section\]/p'  $flile|grep ^$pwd|sed -n -e "s/^\($pwd=\)\(.*\)$/\2/p"

sed -n '/\[$section\]/,/\[\/$section\]/p'  $flile|grep ^$pwd|sed -n -e "s/^\($pwd=\)\([^ ']*\)$/\2/p"

sed命令配置反向引用:小括号反向引用,获取值在拿来使用

参考:

https://www.bbsmax.com/A/kmzLQb4KJG/

http://events.jianshu.io/p/93448199781b

 三种获取等号右边值的方法awk、cut、sed,但是awk、cut是根据“=”进行split,如果password后面的密码值带了"="号,则awk、cut方法无法使用,他们获取不到最后的"=",
只有第三种sed可以
sh cfg_mes.sh clickhouse password

输出如下

mytest

mytest

mytest

 

 posted on 2022-12-28 14:46  xibuhaohao  阅读(584)  评论(0)    收藏  举报