• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > Shell脚本读取ini配置文件的实现代码2例

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

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了shell脚本读取文件,shell脚本,shell脚本编程,shell脚本学习指南,shell脚本实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、简单版

参考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
</div>

使用的时候:
${section.key}
</div>

就可以读到变量啦。

二、复杂版

[comon]
ids=com1,com2,com3
files=profilefile
 
 
[com1]
key="name"
file="test"
 
[com2]
key="name1"
file="test"
 
[com3]
key="name2"
file="test"
</div>

取[com1]的key值我查了下,还好在ChinaUnix里面查到了命令(貌似一位叫wintty兄写的):
这样就简单取到值了。
查了下命令终于明白,命令分为两个部分:
先模式匹配到:[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 "========================================================"
</div>
 
执行的结果如下:
========================================================
+++ConfigName:File+++++++++++++++++++++++++++++++
--------------------------------------------------
COM:com1
key     file  
name    file1 
--------------------------------------------------
--------------------------------------------------
COM:com2
key     file  
name1   file2 
--------------------------------------------------
--------------------------------------------------
COM:com3
key     file  
name2   file3 
--------------------------------------------------
</div>
 
嘿嘿需求又变了,配置文件有多个,怎么取多个文件的配置项嘛:
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
</div>
 
两个小时终于写好了,请各位转载的时候不要忘记加上我的地址哦

您可能想查找下面的文章:

  • Shell脚本切割tomcat的日志文件
  • Shell脚本实现根据文件的修改时间来分类文件
  • shell脚本实现实时检测文件变更
  • Shell脚本逐行读取文本文件(不改变文本格式)
  • Shell脚本一次读取文件中一行的2种写法
  • Shell脚本创建指定大小文件的测试数据
  • Shell脚本统计文件行数的8种方法
  • Shell脚本实现批量替换文件内容
  • Shell脚本实现删除一年前文件功能分享
  • Shell脚本实现删除一年前文件功能分享

相关文章

  • 利用perl、python、php、shell、sed、awk、c 实现字符串的翻转
  • Linux用户配置sudo权限(visudo)的方法
  • sed初学者实用说明
  • 一个简单的转换输出的shell脚本代码
  • Shell脚本查看网卡实时流量
  • 浅谈ctrl+c,ctrl+d,ctrl+z在linux中的意义
  • 使用Shell 脚本实现每隔100行插入一条记录且记录第一列包含行号其他列不变
  • 统计 cpu 内存 使用率的shell脚本代码
  • shell脚本监控mysql主从状态
  • 一个简单的linux命令 touch

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 完美解决ntp的错误问题no server suitable for synchronization fo
    • Shell中调用、引用、包含另一个脚本文件的三种方法
    • Shell中的for循环总结
    • Shell脚本读取标准ini配置文件Demo
    • 使用netcat(瑞士军刀)进行文件传输
    • linux shell字符串内置的常用操作(获取长度、查找、替换)
    • shell脚本编程之if语句学习笔记
    • shell中嵌套执行expect命令实例
    • shell脚本中执行python脚本并接收其返回值的例子
    • 一个简单的linux命令 tail

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有