Shell脚本读取ini配置文件的实现代码2例

 更新时间:2014年08月05日 10:18:16   投稿:junjie  
这篇文章主要介绍了Shell脚本读取ini配置文件的实现代码2例,如果只是读取内容推荐使用简单版,有更多需求请见复杂版,需要的朋友可以参考下

一、简单版

参考stackoverflow的例子,改了一个出来:

复制代码 代码如下:

while IFS='= ' read var val
do
    if [[ $var == \[*] ]]
    then
        section=$(echo $var | sed 's/^\[\(.*\)\]$/\1/')
    elif [[ $val ]]
    then
        if [ -z $section ];then
            declare "${var}=$val"
        else
            declare "${section}.${var}=$val"
        fi 
    fi 
done < config.ini

使用的时候:

复制代码 代码如下:

${section.key}

就可以读到变量啦。

二、复杂版

复制代码 代码如下:

[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

 
两个小时终于写好了,请各位转载的时候不要忘记加上我的地址哦,也不枉费我辛苦一场。

相关文章

  • Shell中正则表达式及sed和awk常见问题

    Shell中正则表达式及sed和awk常见问题

    本文主要介绍了Shell中正则表达式及sed和awk常见问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Bash脚本中特殊变量$0的使用

    Bash脚本中特殊变量$0的使用

    本文主要介绍了Bash脚本中特殊变量$0的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Linux中cp命令的使用详解

    Linux中cp命令的使用详解

    cp 命令是 Linux 中一个重要的命令,你可能经常会用到它,所以本文主要来和大家讲讲cp命令的具体使用,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08
  • Shell中实现字符串反转方法分享

    Shell中实现字符串反转方法分享

    这篇文章主要介绍了Shell中实现字符串反转方法分享,本文同时提供了多种语言的实现方法,如awk、python、bash、C语言等,需要的朋友可以参考下
    2014-12-12
  • shell脚本实现Hbase服务的监控报警和自动拉起问题

    shell脚本实现Hbase服务的监控报警和自动拉起问题

    这篇文章主要介绍了shell脚本实现Hbase服务的监控报警和自动拉起,主要是通过服务名监控和端口监控,通过企业微信消息通知脚本,对此内容感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • Linux 进程替换(exec函数)实现代码

    Linux 进程替换(exec函数)实现代码

    这篇文章主要介绍了Linux 进程替换(exec函数)实现代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • 批量转换目录下文件编码的shell脚本代码

    批量转换目录下文件编码的shell脚本代码

    分享一例shell脚本,实现可以批量转换目录下的文件编码,很实用的一个小shell,有需要的朋友参考下
    2013-11-11
  • Linux中修改文件名的多种方法总结

    Linux中修改文件名的多种方法总结

    在Linux系统中,通过命令行界面可以方便地修改文件名,本篇博客将介绍几种常见的方法,包括mv命令、rename命令、find和mv命令的组合、sed命令以及使用bash脚本,这些方法可以根据实际需求进行选择,提供了灵活性和多样性,需要的朋友可以参考下
    2024-01-01
  • 详谈Linux开发中常见段错误问题的原因及分析

    详谈Linux开发中常见段错误问题的原因及分析

    下面小编就为大家带来一篇详谈Linux开发中常见段错误问题的原因及分析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Linux下Shell编程快捷键大全(日常整理)

    Linux下Shell编程快捷键大全(日常整理)

    有时候,我们需要在 Bash 中重复执行先前的命令。所以学习shell编程快捷键对工作非常有帮助,下面由脚本之家小编给大家介绍Linux下Shell编程快捷键大全,需要的朋友参考下吧
    2016-03-03

最新评论