由于一些原因,需要用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
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>]
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
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
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
[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
}
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
}
- 本文固定链接: http://www.sa-log.com/87.html
- 转载请注明: 王, 帅 于 我的系统记录 发表