首页 > Script > bash解析ini脚本
2014
08-20

bash解析ini脚本

由于一些原因,需要用bash来读取配置文件.

ini的格式比较实用.

但是网上的质量有一些不是很高.就照着网上的扒了一部分.做成小脚本.

可以当脚本使用.也可以当函数使用.

这个脚本有个小缺点.就是修改之后,注释会消失. 做起来太复杂.并且不影响使用.就没有单独去弄他.

毕竟.用脚本修改ini几率很少.

先写使用方法.后写内容:

Usage:ini <filename> <[section]> [<key>] [<newvalue>]

如果”1.ini”内容如下

[a]
a1=aa;a1
a2=aaa;a2
a3=aaaa;a3

[b]
b1=bb;b1
b2=bbb;b2
b3=bbbb;b3

# 如果不加参数 会提示帮助

[root@test ~]# ./1.sh 1.ini
Usage:ini <filename> <[section]> [<key>] [<newvalue>]

# 显示 section 的内容

[root@test ~]# ./1.sh 1.ini a
a1=aa
a2=aaa
a3=aaaa

[root@test ~]# ./1.sh 1.ini b
b1=bb
b2=bbb
b3=bbbb

# 显示key的值

[root@test ~]# ./1.sh 1.ini a a1
aa
[root@test ~]# ./1.sh 1.ini a a2
aaa
[root@test ~]# ./1.sh 1.ini a a3
aaaa
[root@test ~]# ./1.sh 1.ini b b1
bb
[root@test ~]# ./1.sh 1.ini b b2
bbb
[root@test ~]# ./1.sh 1.ini b b3
bbbb

# 修改 section[b]  key[b3] 的值为 “b3b3”

[root@test ~]# ./1.sh 1.ini b b3 b3b3
[root@test ~]# cat 1.ini
[a]
a1=aa;a1
a2=aaa;a2
a3=aaaa;a3

[b]
b1=bb;b1
b2=bbb;b2
b3=b3b3

具体脚本内容如下:

# 解析INI
function rini()
{
# 判断参数数量
if [ $# -lt 2 ];then
echo 'Usage:ini <filename> <[section]> [<key>] [<newvalue>]'
_exit
fi

# 讲ini文件读取到变量
_old=`cat $1`

# 判断变量3是否为空 如果为空 显示该[]下的所有字段
if [ "$3" = "" ];then
sed -n "/\[$2\]/,/\[.*\]/{
/^\[.*\]/d
/^[ ]*$/d
s/;.*$//
p
}"
$1

# 判断变量4是否为空 如果为空 显示该字段的值
elif [ "$4" = "" ];then
sed -n "/\[$2\]/,/\[.*\]/{
/^\[.*\]/d
/^[ ]*$/d
s/;.*$//
s/^[ |    ]*$3[|    ]*=[ |    ]*\(.*\)[ |    ]*/\1/p
}"
$1
else
# 判断变量4是否为字符'#' 如果为'#' 删除改行
if [ "$4" = "#" ];then
sed -i "/\[$2\]/,/\[.*\]/{
s/^[ |    ]*$3[ |    ]*=.*/ /
}"
$1
else

# 如果变量4不为空和'#' 修改该变量 有备注使用改语句修改

sed -i "/\[$2\]/,/\[.*\]/{
s/^[ |    ]*$3[ |    ]*=.*[ |    |.*]/$3=$4            /
#s/^[ |    ]*$3[ |    ]*=[a-zA-Z0-9]*.[0-9]*.[0-9]*.[0-9]*/$3=$4/
}"
$1

# 重新读取新文件
_new=`cat $1`

# 判断是否更改
if [ "$_new" = "$_old" ];then
# 修改没成功 使用以下语句更改
sed -i "/\[$2\]/,/\[.*\]/{
s/^[ |      ]*$3[ |    ]*=.*/$3=$4/
#s/^[ |     ]*$3[ | ]*=[a-zA-Z0-9]*.[0-9]*.[0-9]*.[0-9]*/$3=$4/
}"
$1
fi
fi
fi
}
最后编辑:
作者:王, 帅
这个作者貌似有点懒,什么都没有留下。

留下一个回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据