Bash实现读写ini文件

摘要:
Next}/[*]/{f=0}f'|#查找26grep$option部分下的所有内容|#与选项27grep'='匹配的行|#检查是否存在=28cut-d'='-f2 |#获取相应的值29cut-d'#'-f1 |#删除注释30cut-d';print}')#删除第一个空格32echo$src33test${#src}-eq0&
读取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;这是一个保本 #走吧


免责声明:文章转载自《Bash实现读写ini文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[官网]mono的官方安装方法MS SQLSERVER SELECT FOR XML 中字符的限制问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

easyuitabs(选项卡)

配置好easyui环境 1.笔记: tabs(选项卡) class: //<div style="700px;height:auto"></div> 是否可以关闭:closable:true 选项卡标签的宽度:data-options="tabWidth:200" 下拉菜单: <div id="mm">   <di...

非root用户启动tomcat

sudo默认是需要tty的,通过修改/etc/sudoers文件,将 Defaults requiretty 注释掉即可 用root用户启动tomcat有一个严重的问题,那就是tomcat具有root权限。这意味着你的任何一个jsp脚本都具有root权限,所以可以轻易地用jsp脚本删除你整个硬盘里的东西!所以我们最好不要使用root启动tomcat 使用非...

midway日志体系

日常普通使用 首先我们学会 Midway 的日常日志使用方法。 import{Get}from'@midwayjs/decorator'; import{Inject,Controller,Provide}from'@midwayjs/decorator';   @Provide() @Controller() exportclassHelloCont...

cocos2dx游戏资源加密之XXTEA

在手机游戏当中,游戏的资源加密保护是一件很重要的事情。 我花了两天的时间整理了自己在游戏当中的资源加密问题,实现了跨平台的资源流加密,这个都是巨人的肩膀之上的。 大概的思路是这样的,游戏资源通过XXTEA加密方法对流的加密方式,有自己的密钥和标识,通过标识可知是否有加密,密钥是自己程序当中的。除非有密钥,否则很难通过解出正确的文件。经过加密后,加密文件也就...

php 安装教程

php 安装教程  本文采用php7.0.1作为样例,进行安装。 系统环境:   CentOS6.7.   gcc 4.8.2   libzip 1.0.1 在安装之前,可以先更新CentOS系统。 yum -y update 下载相应依赖文件 wget "http://cn2.php.net/distributions/...

用layui实现下拉框select多选,取值

首先需要的js及css,可以直接在layui官网上下载:https://www.layui.com/ 相关引用: <script src="http://t.zoukankan.com/~/layui-v2.4.5/layui/layui.js"></script><script src="http://t.zoukanka...