zoukankan      html  css  js  c++  java
  • Bash实现读写ini文件

    读取ini文件

    ini文件中可以存在以#和;作为注释的部分,不会影响读取的结果。函数如下

     1 #!/usr/bin/env bash
     2 #-------------------------------------------------------
     3 #    FileName    : Bash读取ini文件.sh
     4 #    Author        :hpy
     5 #    Date        :2020年11月08日
     6 #    Description    :读取ini文件的函数
     7 #------------------------------------------------------- 
     8 
     9 #-----------------------------------------
    10 #函数名:ReadIni 
    11 #功能:读取ini文件,读取成功返回状态码0,否则
    12 #返回状态码1
    13 #@param1:ini文件路径
    14 #@param2:Section
    15 #@param3:Option
    16 #例如:ReadIni test.ini s2 Path 
    17 #-----------------------------------------
    18 function ReadIni(){
    19     fid=$1
    20     section=$2
    21     option=$3
    22 
    23     test ! -f $fid && echo "不存在文件$fid" && return 2
    24     if [ $# -eq 3 ] ; then
    25         local src=$(cat $fid | awk '/['$section']/{f=1;next} /[*]/{f=0} f' |  #找出section下的所有内容
    26         grep $option | # 匹配option的行 
    27         grep '='     | # 看看是不是存在=
    28         cut -d'=' -f2| # 获取对应的值
    29         cut -d'#' -f1| # 去除注释
    30         cut -d';' -f1| #去除注释
    31         awk '{gsub(/^s+|s+$/, "");print}') #去掉最前面的空格
    32         echo $src
    33         test ${#src} -eq 0 && return 2 || return 0  #读取到有效数据 返回状态码0
    34     else
    35         return 2
    36     fi 
    37 }
    38 
    39 
    40 #示例
    41 ReadIni test.ini s3 Path 
    42 test $? -eq 0 && echo "成功读取到数据" || echo "读取失败"

    增加或者改写ini文件

    增加或者改写ini文件的内容

     1 #!/usr/bin/env bash
     2 #-------------------------------------------------------
     3 #    FileName    : WriteIni.sh
     4 #    Author        :hpy
     5 #    Date        :2020年11月08日
     6 #    Description    :写ini文件的函数
     7 #------------------------------------------------------- 
     8 
     9 #-----------------------------------------
    10 #函数名:WriteIni
    11 #功能:增加,改写ini文件,若不存在指定元素
    12 #自动添加,存在则更改,操作成功返回状态码0,
    13 #否则返回状态码2
    14 #@param1:ini文件路径
    15 #@param2:Section
    16 #@param3:Option
    17 #@param4:value
    18 #例如:WriteIni test.ini s2 Path value
    19 #-----------------------------------------
    20 function WriteIni(){
    21     fid=$1
    22     section=$2
    23     option=$3
    24     value=$4
    25     if [ ${fid#*.} != ini ] ; then  
    26         echo "不是ini文件" 
    27         return 2 
    28     fi 
    29     test ! -f $fid && echo "不存在文件$fid" && return 2
    30     if [ $# -eq 4 ] ; then
    31         local src=$(cat $fid | awk '/['$section']/{f=1;next} /[*]/{f=0} f')  #先搜寻是否存在option
    32         if [ ${#src} -eq 0 ] ;then #没有匹配到section,直接新建并添加内容
    33             echo "[$section]" >> $fid
    34             echo "    $option = $value"  >> $fid
    35             return 0
    36         else
    37             local src=$(cat -n $fid | awk '/['$section']/{f=1;next} /[*]/{f=0} f' | grep $option | grep '=')
    38             if [  ${#src} -eq 0 ] ; then #没有对应的 option 直接添加
    39                 local last=$(cat -n $fid | awk '/['$section']/{f=1;next} /[*]/{f=0} f' | tail -n 1)
    40                 last=$(echo $last | cut -d' ' -f1)
    41                 sed -i "${last}a    $option=$value" $fid 
    42                 return 0
    43             fi 
    44             local old_value=$(echo $src | cut -d'=' -f2 |cut -d'#' -f1 | cut -d';' -f1  )
    45             local idx=$(echo $src | cut -d' ' -f1)
    46             local newcontext="$(cat $fid|sed -n "${idx}p" |  sed "s/$old_value/$value/" |  awk '{gsub(/^s+|s+$/, "");print}')"
    47             sed -i "${idx}c    $newcontext" $fid
    48             return 0       
    49         fi  
    50     fi 
    51 }
    52 
    53 
    54 #示例
    55 WriteIni test.ini s3 Go baby
    56 test $? -eq 0 && echo "写入成功" || echo "写入失败"
    测试的 test.ini 文件
     1 [s1] # yy
     2     Path  = /home/yhp/data.log  hh    ; baby # 
     3     Setup = s1.setup 
     4 [s2]
     5     Path  = hhhhhhhh/eeee
     6     Setup = s2.setup 
     7     Patx=mff
     8     Go=mff
     9 [s3]
    10     Path =mff
    11     Go=baby;这是一个保本 #走吧


  • 相关阅读:
    Matlab 绘图实例
    最大回撤,最大回撤恢复时间与最大回撤持续期
    scikit-learn 中 OneHotEncoder 解析
    TensorFlow 内置重要函数解析
    关于字符串常用的函数
    SQL 值得记住的点
    Ubuntu E: 无法获得锁 /var/lib/dpkg/lock
    Ubuntu 16.04 同时使用python3.5
    numpy
    Jupyter notebook 使用Turorial
  • 原文地址:https://www.cnblogs.com/yhpbook/p/14221086.html
Copyright © 2011-2022 走看看