shell解析ini文件

http://blog.csdn.net/chlaws/article/details/8799784




做个shell解析ini文件,用作搭建HA框架中的解析ini配置文件

测试的ini文件是系统里面搜到的一个

[plain]  view plain copy
  1. # Example driver definitions  
  2.   
  3. # Driver from the postgresql-odbc package  
  4. # Setup from the unixODBC package  
  5. [PostgreSQL]  
  6. Description = ODBC for PostgreSQL  
  7. Driver      = /usr/lib/psqlodbc.so  
  8. Setup       = /usr/lib/libodbcpsqlS.so  
  9. Driver64    = /usr/lib64/psqlodbc.so  
  10. Setup64     = /usr/lib64/libodbcpsqlS.so  
  11. FileUsage   = 1  
  12.   
  13.   
  14. # Driver from the mysql-connector-odbc package  
  15. # Setup from the unixODBC package  
  16. [MySQL]  
  17. Description = ODBC for MySQL  
  18. Driver      = /usr/lib/libmyodbc5.so  
  19. Setup       = /usr/lib/libodbcmyS.so  
  20. Driver64    = /usr/lib64/libmyodbc5.so  
  21. Setup64     = /usr/lib64/libodbcmyS.so  
  22. FileUsage   = 1  

iniparser.sh脚本主要就两个函数一个检查ini文件是否合法,另一个是去读取值的

该脚本主要为其它脚本提供这两个函数,处理是不会放在该脚本内的,最后四行是简单测试用的

[python]  view plain copy
  1. #!/bin/bash  
  2.   
  3. #传入参数 文件名  
  4. #返回值   0,合法;其他值非法或出错  
  5. function check_syntax()  
  6. {  
  7.     if [ ! -f $1 ];then   
  8.         return 1  
  9.     fi  
  10.   
  11.     ret=$(awk -F= 'BEGIN{valid=1}  
  12.     {  
  13.         #已经找到非法行,则一直略过处理  
  14.         if(valid == 0) next  
  15.         #忽略空行     
  16.         if(length($0) == 0) next  
  17.         #消除所有的空格  
  18.         gsub(" |\t","",$0)    
  19.         #检测是否是注释行     
  20.         head_char=substr($0,1,1)  
  21.         if (head_char != "#"){  
  22.             #不是字段=值 形式的检测是否是块名  
  23.             if( NF == 1){  
  24.                 b=substr($0,1,1)  
  25.                 len=length($0)  
  26.                 e=substr($0,len,1)  
  27.                 if (b != "[" || e != "]"){  
  28.                     valid=0  
  29.                 }  
  30.             }else if( NF == 2){  
  31.             #检测字段=值 的字段开头是否是[  
  32.                 b=substr($0,1,1)  
  33.                 if (b == "["){  
  34.                     valid=0  
  35.                 }  
  36.             }else{  
  37.             #存在多个=号分割的都非法  
  38.                 valid=0  
  39.             }     
  40.         }  
  41.     }  
  42.     END{print valid}' $1)  
  43.       
  44.     if [ $ret -eq 1 ];then  
  45.         return 0  
  46.     else  
  47.         return 2  
  48.     fi  
  49. }  
  50.   
  51. #参数1 文件名  
  52. #参数2 块名  
  53. #参数3 字段名  
  54. #返回0,表示正确,且能输出字符串表示找到对应字段的值  
  55. #否则其他情况都表示未找到对应的字段或者是出错  
  56. function get_field_value()  
  57. {  
  58.     if [ ! -f $1 ] || [ $# -ne 3 ];then  
  59.         return 1  
  60.     fi  
  61. blockname=$2  
  62. fieldname=$3  
  63.   
  64. begin_block=0  
  65. end_block=0  
  66.   
  67.     cat $1 | while read line  
  68.     do  
  69.       
  70.         if [ "X$line" = "X[$blockname]" ];then  
  71.             begin_block=1  
  72.             continue  
  73.         fi  
  74.           
  75.         if [ $begin_block -eq 1 ];then  
  76.             end_block=$(echo $line | awk 'BEGIN{ret=0} /^\[.*\]$/{ret=1} END{print ret}')  
  77.             if [ $end_block -eq 1 ];then  
  78.                 #echo "end block"  
  79.                 break  
  80.             fi  
  81.       
  82.             need_ignore=$(echo $line | awk 'BEGIN{ret=0} /^#/{ret=1} /^$/{ret=1} END{print ret}')  
  83.             if [ $need_ignore -eq 1 ];then  
  84.                 #echo "ignored line:" $line  
  85.                 continue  
  86.             fi  
  87.             field=$(echo $line | awk -F= '{gsub(" |\t","",$1); print $1}')  
  88.             value=$(echo $line | awk -F= '{gsub(" |\t","",$2); print $2}')  
  89.             #echo "'$field':'$value'"  
  90.             if [ "X$fieldname" = "X$field" ];then     
  91.                 #echo "result value:'$result'"  
  92.                 echo $value  
  93.                 break  
  94.             fi  
  95.               
  96.         fi  
  97.     done  
  98.     return 0  
  99. }  
  100.   
  101. check_syntax odbcinst.ini  
  102. echo "check syntax status:$?"  
  103. GLOBAL_FIELD_VALUE=$(get_field_value odbcinst.ini PostgreSQL Setup)  
  104. echo "status:$?,value:$GLOBAL_FIELD_VALUE"  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值