使用Shell实现ini文件的读写

 更新时间:2024年11月30日 11:42:20   作者:Lydro  
这篇文章主要为大家详细介绍了如何使用Shell实现ini文件的读写,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下

自己写小工具需要用到shell读写ini文件,在网上找了很多资料,自己整理的目前使用没问题的代码如下:

set代码:

#!/bin/bash
 
# 提示信息
msg="Please input the param 【<get|set> <file> <section> <key> [value]】"
 
 
# 操作文件
file=$1
# 指定section
section=$2
# 指定key
key=$3
# value
value=$4
 
function get_opt()
{
    INIFILE=$1;
    SECTION=$2;
    ITEM=$3
 
    tmpfile="/tmp/tmp.ini"
    # 去掉配置文件中的注释行和空行,保存到tmpfile中。
    sed '/^#/d;/^$/d' ${INIFILE} > ${tmpfile}
 
    _readIni=`awk -F '=' '/\['${SECTION}'\]/{a=1}a==1&&$1~/'${ITEM}'/{print $2;exit}' ${tmpfile}`
    echo ${_readIni}
}
 
function set_opt()
{
    # 函数使用说明:
    #   write_ini_file <文件> <节> <键> <值>
    #   如果节或者键不存在,则添加
    #   如果节、键存在,值不匹配,则更新
    #   如果节、键、值均存在,则不做操作
 
    allSections=$(awk -F '[][]' '/\[.*]/{print $2}' $1)
    iniSections=(${allSections// /})
    # 判断是否要新建item
    itemFlag="0"
    for temp in ${iniSections[@]};do
        if [[ "${temp}" = "$2" ]];then
            itemFlag="1"
            break
        fi
    done
 
    if [[ "$itemFlag" = "0" ]];then
        echo "[$2]" >> $1
    fi
 
    # 加入或更新value
    awk "/\[$2\]/{a=1}a==1" $1|sed -e '1d' -e '/^$/d'  -e 's/[ \t]*$//g' -e 's/^[ \t]*//g' -e '/\[/,$d'|grep "$3.\?=">/dev/null
    if [[ "$?" -eq 0 ]];then
        # 更新
        # 找到指定item行号码
        itemNum=$(sed -n -e "/\[$2\]/=" $1)
        sed -i "${itemNum},/^\[.*\]/s/\($3.\?=\).*/\1$4/g" $1 >/dev/null 2>&1
        # 如果替换失败,可能文件中有\,更换分隔符为!
        if [[ "$?" -ne 0 ]];then
            sed -i "${itemNum},/^\[.*\]/s!\($3.\?=\).*!\1$4!g" $1
        fi
    else
        # 新增
        sed -i "/^\[$2\]/a\\$3=$4" $1
    fi
}
 
# 判断输入参数
set_opt $file $section $key $value

get代码:

#!/bin/bash
 
# 提示信息
msg="Please input the param 【<get|set> <file> <section> <key> [value]】"
 
 
# 操作文件
file=$1
# 指定section
section=$2
# 指定key
key=$3
 
 
function get_opt()
{
    INIFILE=$1;
    SECTION=$2;
    ITEM=$3
 
    tmpfile="/tmp/tmp.ini"
    # 去掉配置文件中的注释行和空行,保存到tmpfile中。
    sed '/^#/d;/^$/d' ${INIFILE} > ${tmpfile}
 
    _readIni=`awk -F '=' '/\['${SECTION}'\]/{a=1}a==1&&$1~/'${ITEM}'/{print $2;exit}' ${tmpfile}`
    echo ${_readIni}
}
 
 
 
# 判断输入参数
get_opt $file $section $key

到此这篇关于使用Shell实现ini文件的读写的文章就介绍到这了,更多相关Shell读写ini文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux ls命令操作详解

    Linux ls命令操作详解

    通过 ls 命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,这篇文章主要介绍了Linux ls命令详解,需要的朋友可以参考下
    2025-04-04
  • Linux 无法使用userdel 删除用户和组的解决方案

    Linux 无法使用userdel 删除用户和组的解决方案

    这篇文章主要介绍了Linux 无法使用userdel 删除用户和组的解决方案的相关资料,需要的朋友可以参考下
    2017-04-04
  • Shell脚本实现查杀子进程、僵尸进程

    Shell脚本实现查杀子进程、僵尸进程

    这篇文章主要介绍了Shell脚本实现查杀子进程、僵尸进程,本文直接给出实现代码,实现递归找到导致进程僵死的最底层子进程并杀除,需要的朋友可以参考下
    2015-01-01
  • Linux实现简易版Shell的代码详解

    Linux实现简易版Shell的代码详解

    本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS – Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解 Shell 工作原理的迷你 Shell,g感兴趣的小伙伴跟着小伙伴一起来看看吧
    2025-05-05
  • bash shell逻辑表达式的使用

    bash shell逻辑表达式的使用

    bash shell逻辑表达式一般有3种写法,本文就来介绍一下bash shell逻辑表达式的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05
  • 详解Linux定时任务Crontab的介绍与使用

    详解Linux定时任务Crontab的介绍与使用

    linux内置的cron进程能帮我们实现这些需求,cron搭配shell脚本,非常复杂的指令也没有问题。本文主要介绍了定时任务Crontab的使用,需要的可以学习一下
    2022-10-10
  • Shell字符串比较相等、不相等方法小结

    Shell字符串比较相等、不相等方法小结

    这篇文章主要介绍了Shell字符串比较相等、不相等方法小结,本文直接给出代码,但代码中含有大量注释,需要的朋友可以参考下
    2014-10-10
  • shell set -u 和set +u的具体使用

    shell set -u 和set +u的具体使用

    本文主要介绍了shell set -u 和set +u的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • linux压缩常用命令小结

    linux压缩常用命令小结

    这篇文章主要介绍了linux压缩常用命令知识,包括压缩解压缩方面的内容,本文给大家介绍的非常详细,需要的朋友参考下吧
    2017-03-03
  • 利用xargs批量删除Docker镜像的方法

    利用xargs批量删除Docker镜像的方法

    在Linux系统中,xargs命令是一个非常强大的工具,可以帮助将标准输入转换为命令行参数,并传递给其他命令,本文将重点介绍xargs参数的使用,以及如何利用xargs结合其他命令删除特定的Docker镜像,需要的朋友可以参考下
    2024-04-04

最新评论