多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 读取ini文件 函数如下 ```bash #!/usr/bin/env bash #------------------------------------------------------- # FileName : Bash读取ini文件.sh # Author :hpy # Date :2020年11月08日 # Description :读取ini文件的函数 #------------------------------------------------------- #----------------------------------------- #函数名:ReadIni #功能:读取ini文件,读取成功返回状态码0,否则 #返回状态码1 #@param1:ini文件路径 #@param2:Section #@param3:Option #例如:ReadIni test.ini s2 Path #----------------------------------------- function ReadIni(){ fid=$1 section=$2 option=$3 test ! -f $fid && echo "不存在文件$fid" && return 2 if [ $# -eq 3 ] ; then local src=$(cat $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' | #找出section下的所有内容 grep $option | # 匹配option的行 grep '=' | # 看看是不是存在= cut -d'=' -f2| # 获取对应的值 cut -d'#' -f1| # 去除注释 cut -d';' -f1| #去除注释 awk '{gsub(/^\s+|\s+$/, "");print}') #去掉最前面的空格 echo $src test ${#src} -eq 0 && return 2 || return 0 #读取到有效数据 返回状态码0 else return 2 fi } ReadIni test.ini s3 Path test $? -eq 0 && echo "成功读取到数据" || echo "读取失败" ``` # 增加或者改写ini文件 ```bash #!/usr/bin/env bash #------------------------------------------------------- # FileName : WriteIni.sh # Author :hpy # Date :2020年11月08日 # Description :写ini文件的函数 #------------------------------------------------------- #----------------------------------------- #函数名:WriteIni #功能:增加,改写ini文件,若不存在指定元素 #自动添加,存在则更改,操作成功返回状态码0, #否则返回状态码2 #@param1:ini文件路径 #@param2:Section #@param3:Option #@param4:value #例如:WriteIni test.ini s2 Path value #----------------------------------------- function WriteIni(){ fid=$1 section=$2 option=$3 value=$4 if [ ${fid#*.} != ini ] ; then echo "不是ini文件" return 2 fi test ! -f $fid && echo "不存在文件$fid" && return 2 if [ $# -eq 4 ] ; then local src=$(cat $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f') #先搜寻是否存在option if [ ${#src} -eq 0 ] ;then #没有匹配到section,直接新建并添加内容 echo "[$section]" >> $fid echo " $option = $value" >> $fid return 0 else local src=$(cat -n $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' | grep $option | grep '=') if [ ${#src} -eq 0 ] ; then #没有对应的 option 直接添加 local last=$(cat -n $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' | tail -n 1) last=$(echo $last | cut -d' ' -f1) sed -i "${last}a\ $option=$value" $fid return 0 fi local old_value=$(echo $src | cut -d'=' -f2 |cut -d'#' -f1 | cut -d';' -f1 ) local idx=$(echo $src | cut -d' ' -f1) local newcontext="$(cat $fid|sed -n "${idx}p" | sed "s/$old_value/$value/" | awk '{gsub(/^\s+|\s+$/, "");print}')" sed -i "${idx}c\ $newcontext" $fid return 0 fi fi } WriteIni test.ini s3 Go baby test $? -eq 0 && echo "写入成功" || echo "写入失败" ``` # fish shell函数读取 ```shell #!/usr/bin/env fish #根据Section和Option读取ini文件 #you can use : # readini filepath # readini filepath section # readini filepath section option function readini --description 'Read ini file' set fid $argv[1] test ! -f $fid && echo "不存在文件$fid" && return 2 if test (count $argv) -eq 3 set section $argv[2] set option $argv[3] set src (cat $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' | #找出section下的所有内容 grep $option | # 匹配option的行 grep '=' | # 看看是不是存在= cut -d'=' -f2| # 获取对应的值 cut -d'#' -f1| # 去除注释 cut -d';' -f1| #去除注释 awk '{gsub(/^\s+|\s+$/, "");print}') #去掉最前面的空格 echo $src test (count $src) -eq 0 && echo "Usage : ReadIni FilePath [Section] [Option]" && return 2 || return 0 #读取到有效数据 返回状态码0 else if test (count $argv) -eq 2 #参数解析 set section $argv[2] cat $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' |grep '=' |cut -d'#' -f1|cut -d';' -f1 | awk '{gsub(/^\s+|\s+$/, "");print}' if test (cat $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' |grep '='| wc -l) -eq 0 return 2 else return 0 end else if test (count $argv) -eq 1 cat $fid | grep '=\|\[*\]' | cut -d'#' -f1|cut -d';' -f1 else echo " Usage : ReadIni FilePath Section Option" return 2 end end ```