shell解析ini文件

做个shell解析ini文件,用作搭建HA框架中的解析ini配置文件

测试的ini文件是系统里面搜到的一个

Example driver definitions

Driver from the postgresql-odbc package

Setup from the unixODBC package

[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/psqlodbc.so
Setup = /usr/lib/libodbcpsqlS.so
Driver64 = /usr/lib64/psqlodbc.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1

Driver from the mysql-connector-odbc package

Setup from the unixODBC package

[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1

iniparser.sh脚本主要就两个函数一个检查ini文件是否合法,另一个是去读取值的
该脚本主要为其它脚本提供这两个函数,处理是不会放在该脚本内的,最后四行是简单测试用的

#!/bin/bash

#传入参数 文件名
#返回值 0,合法;其他值非法或出错
function check_syntax()
{
if [ ! -f $1 ];then
return 1
fi

ret=$(awk -F= 'BEGIN{valid=1}
{
	#已经找到非法行,则一直略过处理
	if(valid == 0) next
	#忽略空行	
	if(length($0) == 0) next
	#消除所有的空格
	gsub(" |\t","",$0)	
	#检测是否是注释行	
	head_char=substr($0,1,1)
	if (head_char != "#"){
		#不是字段=值 形式的检测是否是块名
		if( NF == 1){
			b=substr($0,1,1)
			len=length($0)
			e=substr($0,len,1)
			if (b != "[" || e != "]"){
				valid=0
			}
		}else if( NF == 2){
		#检测字段=值 的字段开头是否是[
			b=substr($0,1,1)
			if (b == "["){
				valid=0
			}
		}else{
		#存在多个=号分割的都非法
			valid=0
		}	
	}
}
END{print valid}' $1)

if [ $ret -eq 1 ];then
	return 0
else
	return 2
fi

}

#参数1 文件名
#参数2 块名
#参数3 字段名
#返回0,表示正确,且能输出字符串表示找到对应字段的值
#否则其他情况都表示未找到对应的字段或者是出错
function get_field_value()
{
if [ ! -f $1 ] || [ $# -ne 3 ];then
return 1
fi
blockname=$2
fieldname=$3

begin_block=0
end_block=0

cat $1 | while read line
do

	if [ "X$line" = "X[$blockname]" ];then
		begin_block=1
		continue
	fi
	
	if [ $begin_block -eq 1 ];then
		end_block=$(echo $line | awk 'BEGIN{ret=0} /^\[.*\]$/{ret=1} END{print ret}')
		if [ $end_block -eq 1 ];then
			#echo "end block"
			break
		fi

		need_ignore=$(echo $line | awk 'BEGIN{ret=0} /^#/{ret=1} /^$/{ret=1} END{print ret}')
		if [ $need_ignore -eq 1 ];then
			#echo "ignored line:" $line
			continue
		fi
		field=$(echo $line | awk -F= '{gsub(" |\t","",$1); print $1}')
		value=$(echo $line | awk -F= '{gsub(" |\t","",$2); print $2}')
		#echo "'$field':'$value'"
		if [ "X$fieldname" = "X$field" ];then	
			#echo "result value:'$result'"
			echo $value
			break
		fi
		
	fi
done
return 0

}

check_syntax odbcinst.ini
echo "check syntax status: ? " G L O B A L F I E L D V A L U E = ?" GLOBAL_FIELD_VALUE= ?"GLOBALFIELDVALUE=(get_field_value odbcinst.ini PostgreSQL Setup)
echo “status: ? , v a l u e : ?,value: ?,value:GLOBAL_FIELD_VALUE”

————————————————
版权声明:本文为CSDN博主「chlaws」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chlaws/article/details/8799784

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值