人生不设限

导航

shell解析my.cnf配置文件

my.cnf配置格式如下

vi my.cnf
[client]
port=3306
socket=/tmp/mysql.socket

[mysqld]
port=3306
server-id=1
datadir=/usr/local/mysql/data

[mysqld_safe]
port=3306

more parseMy.sh

#!/bin/bash
cnf=$(cd `dirname $0`;pwd)"/my.cnf"

#得到区块数组
g_sec=(`sed -n '/\[*\]/p' $cnf |grep -v '^#'|tr -d []`)
#sed -n '/\[*\]/p' 得到包含[*]的行
#grep -v '^#' 去掉#打头的行
#tr -d [] 去掉[]
#g_sec=(client mysqld mysqld_safe)

for ((i=0;i<${#g_sec[@]};i++))
do
echo "解析No."$i
sec_name=${g_sec[i]}
g_names=(`sed -n '/\['$sec_name'\]/,/\[/p' $cnf|grep -Ev '\[|\]|^$|^#'|awk -F '=' '{print $1}'`)
#sed -n '/\['$sec_name'\]/,/\[/p' 得到从[$sec_name]到临近[的所有行
#grep -Ev '\[|\]|^$|^#' 去掉包含[或]的行 去掉空行 去掉#打头的行
#awk -F '=' '{print $1}'`得到=号前面字符

g_values=(`sed -n '/\['$sec_name'\]/,/\[/p' $cnf|grep -Ev '\[|\]|^$|^#'|awk -F '=' '{print $2}'`)
#awk -F '=' '{print $1}'`得到=号后面字符

for ((j=0;j<${#g_names[@]};j++))
do
echo ${g_names[$j]}" "${g_values[$j]}
done

done

posted on 2017-09-29 19:26  风的_理想  阅读(425)  评论(0编辑  收藏  举报