zoukankan      html  css  js  c++  java
  • shell脚本读取ini配置文件的值

    本博客引用自:https://blog.csdn.net/yuzaipiaofei/article/details/6619472

      1  
      2 2011-07-19 16:22
      3  
      4 昨天熬了夜,纯属打酱油,顺便帮同事看了下查看INI文件内容,不敢独享,拿出来分享下。
      5  
      6 现有需求用SHELL命令读取INI文件里面的具体的Key值那?加入有INI文件config.ini格式一般如下:
      7  
      8 [comon]
      9 ids=com1,com2,com3
     10 files=profilefile
     11  
     12  
     13 [com1]
     14 key="name"
     15 file="test"
     16  
     17 [com2]
     18 key="name1"
     19 file="test"
     20  
     21 [com3]
     22 key="name2"
     23 file="test"
     24  
     25 取[com1]的key值我查了下,还好在ChinaUnix里面查到了命令(貌似一位叫wintty兄写的):
     26  awk -F '=' '/[com1]/{a=1}a==1&&$1~/key/{print $2;exit}' config.ini
     27 这样就简单取到值了。
     28 查了下命令终于明白,命令分为两个部分:
     29 先模式匹配到:[com1]然后执行动作:a=1,再接着有来个模式+命令
     30 模式:“a==1&&$1~/key/ 31 a==1因为已经赋值了,所以执行下一步,如果$1第一个字段匹配key的值,则
     32 打印第2项,紧接着退出,退出就不会打印到匹配[com2]和[com3]的key值.
     33  
     34 -------------------------------------------------------------
     35 需求会变得,现在变成取【com】几个key对应的值,提供的shell的脚本如下:
     36 #!/bin/sh
     37 getconfig()
     38 {
     39   SECTION=$1
     40   CONFILE=$2
     41   ENDPRINT="key	file	"
     42   echo "$ENDPRINT"
     43   for loop in `echo $ENDPRINT|tr '	' ' '`
     44   do
     45        #这里面的的SECTION的变量需要先用双引号,再用单引号,我想可以这样理解,
     46        #单引号标示是awk里面的常量,因为$为正则表达式的特殊字符,双引号,标示取变量的值
     47        #{gsub(/[[:blank:]]*/,"",$2)去除值两边的空格内容
     48        awk -F '=' '/['"$SECTION"']/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s	",$2) ;exit}' $CONFILE
     49   done
     50 }
     51  
     52 #更改变量名称
     53 CONFIGFILE=$1
     54 echo "========================================================"
     55 #文件名称
     56 echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
     57 #取得ids中的每个id把,号分隔改成空格,因为循环内容要以空格分隔开来
     58 profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
     59 #对于一个配置文件中的所有id循环
     60 for OneCom in $profile
     61 do
     62   echo "--------------------------------------------------"
     63   echo "COM:$OneCom"
     64   #此处函数调用有时候不能用反引号,不然会出错,此处原由还不清楚知道的麻烦请告之
     65   getconfig  $OneCom  $CONFIGFILE
     66   echo "
    "
     67   echo "--------------------------------------------------"
     68   #break
     69 done
     70 echo "========================================================"
     71  
     72  
     73 执行的结果如下:
     74 $ one.sh File
     75 ========================================================
     76 +++ConfigName:File+++++++++++++++++++++++++++++++
     77 --------------------------------------------------
     78 COM:com1
     79 key     file   
     80 name    file1  
     81 --------------------------------------------------
     82 --------------------------------------------------
     83 COM:com2
     84 key     file   
     85 name1   file2  
     86 --------------------------------------------------
     87 --------------------------------------------------
     88 COM:com3
     89 key     file   
     90 name2   file3  
     91 --------------------------------------------------
     92 ========================================================
     93  
     94 嘿嘿需求又变了,配置文件有多个,怎么取多个文件的配置项嘛:
     95 #!/bin/sh
     96 getconfig()
     97 {
     98   SECTION=$1
     99   CONFILE=$2
    100   ENDPRINT="key	file	"
    101  
    102   echo "$ENDPRINT"
    103   for loop in `echo $ENDPRINT|tr '	' ' '`
    104   do
    105    
    106        awk -F '=' '/['"$SECTION"']/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s	",$2) ;exit}' $CONFILE
    107   done
    108 }
    109  
    110 #显示的多个文件名将多行的回车符转成逗号分隔符
    111 CONFIGFILES=`ls $1|tr '
    ' ','`
    112 #查看到底有多个配置文件
    113 _Num=`echo $CONFIGFILES|tr -cd \,|wc -c`
    114 #临时变量保存配置多个文件
    115 _TMPFILES=$CONFIGFILES
    116 while [ $_Num -ge 1 ]
    117 do
    118   #得到一个文件
    119   CONFIGFILE=`echo $_TMPFILES|cut -d ',' -f1`
    120   #余下的文件
    121   _TMPFILES=`echo $_TMPFILES|cut -d ',' -f2-`
    122   #配置文件数量减一
    123   _Num=$(($_Num-1))
    124   echo "========================================================"
    125   #文件名称
    126   echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
    127   profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
    128   #对于一个配置文件中的所有id循环
    129   for OneCom in $profile
    130   do
    131     echo "--------------------------------------------------"       
    132     echo "COM:$OneCom"
    133     getconfig  $OneCom  $CONFIGFILE
    134     echo "
    "
    135     echo "--------------------------------------------------"
    136     #break
    137   done
    138 echo "========================================================"
    139 done
    140  
    141  
    142 两个小时终于写好了,请各位转载的时候不要忘记加上我的地址哦,也不枉费我辛苦一场。
    143 http://www.cublog.cn/u1/55091/showart_2125956.html
  • 相关阅读:
    MySQL 中now()时间戳用法
    ajax local.href不跳转的原因之一
    Call to a member function select() on string错误
    TP框架中ajax post请求时提示404
    TP框架中field查询字段
    jQuery如何获得select选中的值?input单选radio选中的值
    TP框架中session操作
    InnerHtml() 与html( )的区别
    C++开源项目等收集
    RCU-数据库初始化参数
  • 原文地址:https://www.cnblogs.com/hit-joseph/p/12330473.html
Copyright © 2011-2022 走看看