shell脚本读取ini配置文件的值

来源:互联网 发布:黄婷婷知乎 编辑:程序博客网 时间:2024/05/20 14:27
[comon]ids=com1,com2,com3files=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/shgetconfig(){  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=$1echo "========================================================"#文件名称echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"#取得ids中的每个id把,号分隔改成空格,因为循环内容要以空格分隔开来profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`#对于一个配置文件中的所有id循环for OneCom in $profiledo  echo "--------------------------------------------------"  echo "COM:$OneCom"  #此处函数调用有时候不能用反引号,不然会出错,此处原由还不清楚知道的麻烦请告之  getconfig  $OneCom  $CONFIGFILE  echo "\n"  echo "--------------------------------------------------"  #breakdoneecho "========================================================"  执行的结果如下:$ one.sh File========================================================+++ConfigName:File+++++++++++++++++++++++++++++++--------------------------------------------------COM:com1key     file   name    file1  ----------------------------------------------------------------------------------------------------COM:com2key     file   name1   file2  ----------------------------------------------------------------------------------------------------COM:com3key     file   name2   file3  --------------------------------------------------======================================================== 嘿嘿需求又变了,配置文件有多个,怎么取多个文件的配置项嘛:#!/bin/shgetconfig(){  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=$CONFIGFILESwhile [ $_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  doneecho "========================================================"done  两个小时终于写好了,请各位转载的时候不要忘记加上我的地址哦,也不枉费我辛苦一场。http://www.cublog.cn/u1/55091/showart_2125956.html