读取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;这是一个保本 #走吧