脚本读INI文件
来源:互联网 发布:机械动态图制作软件 编辑:程序博客网 时间:2024/06/08 05:21
现有需求用SHELL命令读取INI文件里面的具体的Key值那?加入有INI文件config.ini格式一般如下:
[comon]
ids=com1,com2,com3
files=profilefile
[com1]
key="name"
file="test"
[com2]
key="name1"
file="test"
[com3]
key="name2"
file="test"
取[com1]的key值我查了下,还好在ChinaUnix里面查到了命令(貌似一位叫wintty兄写的):
awk -F '=' '/\[com1\]/{a=1}a==1&&$1~/key/{print $2;exit}' config.ini
这样就简单取到值了。
查了下命令终于明白,命令分为两个部分:
先模式匹配到:[com1]然后执行动作:a=1,再接着有来个模式+命令
模式:“a==1&&$1~/key/”
a==1因为已经赋值了,所以执行下一步,如果$1第一个字段匹配key的值,则
打印第2项,紧接着退出,退出就不会打印到匹配[com2]和[com3]的key值.
-------------------------------------------------------------
需求会变得,现在变成取【com】几个key对应的值,提供的shell的脚本如下:
#!/bin/sh
getconfig()
{
SECTION=$1
CONFILE=$2
ENDPRINT="key\tfile\t"
echo "$ENDPRINT"
for loop in `echo $ENDPRINT|tr '\t' ' '`
do
#这里面的的SECTION的变量需要先用双引号,再用单引号,我想可以这样理解,
#单引号标示是awk里面的常量,因为$为正则表达式的特殊字符,双引号,标示取变量的值
#{gsub(/[[:blank:]]*/,"",$2)去除值两边的空格内容
awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE
done
}
#更改变量名称
CONFIGFILE=$1
echo "========================================================"
#文件名称
echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
#取得ids中的每个id把,号分隔改成空格,因为循环内容要以空格分隔开来
profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
#对于一个配置文件中的所有id循环
for OneCom in $profile
do
echo "--------------------------------------------------"
echo "COM:$OneCom"
#此处函数调用有时候不能用反引号,不然会出错,此处原由还不清楚知道的麻烦请告之
getconfig $OneCom $CONFIGFILE
echo "\n"
echo "--------------------------------------------------"
#break
done
echo "========================================================"
执行的结果如下:
$ one.sh File
========================================================
+++ConfigName:File+++++++++++++++++++++++++++++++
--------------------------------------------------
COM:com1
key file
name file1
--------------------------------------------------
--------------------------------------------------
COM:com2
key file
name1 file2
--------------------------------------------------
--------------------------------------------------
COM:com3
key file
name2 file3
--------------------------------------------------
========================================================
嘿嘿需求又变了,配置文件有多个,怎么取多个文件的配置项嘛:
#!/bin/sh
getconfig()
{
SECTION=$1
CONFILE=$2
ENDPRINT="key\tfile\t"
echo "$ENDPRINT"
for loop in `echo $ENDPRINT|tr '\t' ' '`
do
awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE
done
}
#显示的多个文件名将多行的回车符转成逗号分隔符
CONFIGFILES=`ls $1|tr '\n' ','`
#查看到底有多个配置文件
_Num=`echo $CONFIGFILES|tr -cd \,|wc -c`
#临时变量保存配置多个文件
_TMPFILES=$CONFIGFILES
while [ $_Num -ge 1 ]
do
#得到一个文件
CONFIGFILE=`echo $_TMPFILES|cut -d ',' -f1`
#余下的文件
_TMPFILES=`echo $_TMPFILES|cut -d ',' -f2-`
#配置文件数量减一
_Num=$(($_Num-1))
echo "========================================================"
#文件名称
echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
#对于一个配置文件中的所有id循环
for OneCom in $profile
do
echo "--------------------------------------------------"
echo "COM:$OneCom"
getconfig $OneCom $CONFIGFILE
echo "\n"
echo "--------------------------------------------------"
#break
done
echo "========================================================"
done
[comon]
ids=com1,com2,com3
files=profilefile
[com1]
key="name"
file="test"
[com2]
key="name1"
file="test"
[com3]
key="name2"
file="test"
取[com1]的key值我查了下,还好在ChinaUnix里面查到了命令(貌似一位叫wintty兄写的):
awk -F '=' '/\[com1\]/{a=1}a==1&&$1~/key/{print $2;exit}' config.ini
这样就简单取到值了。
查了下命令终于明白,命令分为两个部分:
先模式匹配到:[com1]然后执行动作:a=1,再接着有来个模式+命令
模式:“a==1&&$1~/key/”
a==1因为已经赋值了,所以执行下一步,如果$1第一个字段匹配key的值,则
打印第2项,紧接着退出,退出就不会打印到匹配[com2]和[com3]的key值.
-------------------------------------------------------------
需求会变得,现在变成取【com】几个key对应的值,提供的shell的脚本如下:
#!/bin/sh
getconfig()
{
SECTION=$1
CONFILE=$2
ENDPRINT="key\tfile\t"
echo "$ENDPRINT"
for loop in `echo $ENDPRINT|tr '\t' ' '`
do
#这里面的的SECTION的变量需要先用双引号,再用单引号,我想可以这样理解,
#单引号标示是awk里面的常量,因为$为正则表达式的特殊字符,双引号,标示取变量的值
#{gsub(/[[:blank:]]*/,"",$2)去除值两边的空格内容
awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE
done
}
#更改变量名称
CONFIGFILE=$1
echo "========================================================"
#文件名称
echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
#取得ids中的每个id把,号分隔改成空格,因为循环内容要以空格分隔开来
profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
#对于一个配置文件中的所有id循环
for OneCom in $profile
do
echo "--------------------------------------------------"
echo "COM:$OneCom"
#此处函数调用有时候不能用反引号,不然会出错,此处原由还不清楚知道的麻烦请告之
getconfig $OneCom $CONFIGFILE
echo "\n"
echo "--------------------------------------------------"
#break
done
echo "========================================================"
执行的结果如下:
$ one.sh File
========================================================
+++ConfigName:File+++++++++++++++++++++++++++++++
--------------------------------------------------
COM:com1
key file
name file1
--------------------------------------------------
--------------------------------------------------
COM:com2
key file
name1 file2
--------------------------------------------------
--------------------------------------------------
COM:com3
key file
name2 file3
--------------------------------------------------
========================================================
嘿嘿需求又变了,配置文件有多个,怎么取多个文件的配置项嘛:
#!/bin/sh
getconfig()
{
SECTION=$1
CONFILE=$2
ENDPRINT="key\tfile\t"
echo "$ENDPRINT"
for loop in `echo $ENDPRINT|tr '\t' ' '`
do
awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE
done
}
#显示的多个文件名将多行的回车符转成逗号分隔符
CONFIGFILES=`ls $1|tr '\n' ','`
#查看到底有多个配置文件
_Num=`echo $CONFIGFILES|tr -cd \,|wc -c`
#临时变量保存配置多个文件
_TMPFILES=$CONFIGFILES
while [ $_Num -ge 1 ]
do
#得到一个文件
CONFIGFILE=`echo $_TMPFILES|cut -d ',' -f1`
#余下的文件
_TMPFILES=`echo $_TMPFILES|cut -d ',' -f2-`
#配置文件数量减一
_Num=$(($_Num-1))
echo "========================================================"
#文件名称
echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
#对于一个配置文件中的所有id循环
for OneCom in $profile
do
echo "--------------------------------------------------"
echo "COM:$OneCom"
getconfig $OneCom $CONFIGFILE
echo "\n"
echo "--------------------------------------------------"
#break
done
echo "========================================================"
done
- 脚本读INI文件
- 读ini文件
- 读INI文件
- 读ini文件
- vc读INI文件
- MFC 读ini文件
- 读ini文件
- 读ini文件.
- 读ini文件
- 用FileSystemObject对象读取INI 文件 支持 VB读INI VBS读INI ASP 读INI
- 读ini文件乱码问题
- QT去读ini文件
- QSettings读.ini文件方法
- 读、写一个.ini文件
- INI文件
- ini文件
- INI文件
- INI文件
- EFM32片内外设--TFT 汉字字库(续)
- 一个简单的完成端口(服务端/客户端)类
- Android 启动流程: Init.c 阅读笔记 .
- java之非桥接方式连接Access 2003数据库...
- Shape是一个几何图形的基类,它至少有求自身周长函数Circumference()和求自身面积函数Area()。从Shape类派生出Circle类、Ellipse类、Triangle类和Rectan
- 脚本读INI文件
- eclipse代码提示功能的设置
- linux 中安装与启动FTP服务
- S3C2440 AD转换器
- Linux下s3c6410的GPIO操作(4)
- Android AsyncTask 用法
- IO (一)
- 用DOM方式解析XML(使用JAXP工具)--第一天
- Eclipse 代码提示功能设置。