日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例

發布時間:2023/12/4 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡單版

參考stackoverflow的例子,改了一個出來:

while IFS='= ' read var val

do

if [[ $var == \[*] ]]

then

section=$(echo $var | sed 's/^\[\(.*\)\]$/\1/')

elif [[ $val ]]

then

if [ -z $section ];then

declare "${var}=$val"

else

declare "${section}.${var}=$val"

fi

fi

done < config.ini

使用的時候:

${section.key}

就可以讀到變量啦。

二、復雜版

[comon]

ids=com1,com2,com3

files=profilefile

[com1]

key="name"

file="test"

[com2]

key="name1"

file="test"

[com3]

key="name2"

file="test"

取[com1]的key值我查了下,還好在ChinaUnix里面查到了命令(貌似一位叫wintty兄寫的):

awk -F '=' '/\[com1\]/{a=1}a==1&&$1~/key/{print $2;exit}' config.ini

這樣就簡單取到值了。

查了下命令終于明白,命令分為兩個部分:

先模式匹配到:[com1]然后執行動作:a=1,再接著有來個模式+命令

模式:“a==1&&$1~/key/”

a==1因為已經賦值了,所以執行下一步,如果$1第一個字段匹配key的值,則

打印第2項,緊接著退出,退出就不會打印到匹配[com2]和[com3]的key值.

需求會變得,現在變成取【com】幾個key對應的值,提供的shell的腳本如下:

#!/bin/sh

getconfig()

{

SECTION=$1

CONFILE=$2

ENDPRINT="key\tfile\t"

echo "$ENDPRINT"

for loop in `echo $ENDPRINT|tr '\t' ' '`

do

#這里面的的SECTION的變量需要先用雙引號,再用單引號,我想可以這樣理解,

#單引號標示是awk里面的常量,因為$為正則表達式的特殊字符,雙引號,標示取變量的值

#{gsub(/[[:blank:]]*/,"",$2)去除值兩邊的空格內容

awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE

done

}

#更改變量名稱

CONFIGFILE=$1

echo "========================================================"

#文件名稱

echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"

#取得ids中的每個id把,號分隔改成空格,因為循環內容要以空格分隔開來

profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`

#對于一個配置文件中的所有id循環

for OneCom in $profile

do

echo "--------------------------------------------------"

echo "COM:$OneCom"

#此處函數調用有時候不能用反引號,不然會出錯,此處原由還不清楚知道的麻煩請告之

getconfig? $OneCom? $CONFIGFILE

echo "\n"

echo "--------------------------------------------------"

#break

done

echo "========================================================"

執行的結果如下:

$ one.sh File

========================================================

+++ConfigName:File+++++++++++++++++++++++++++++++

--------------------------------------------------

COM:com1

key???? file

name??? file1

--------------------------------------------------

--------------------------------------------------

COM:com2

key???? file

name1?? file2

--------------------------------------------------

--------------------------------------------------

COM:com3

key???? file

name2?? file3

--------------------------------------------------

嘿嘿需求又變了,配置文件有多個,怎么取多個文件的配置項嘛:

#!/bin/sh

getconfig()

{

SECTION=$1

CONFILE=$2

ENDPRINT="key\tfile\t"

echo "$ENDPRINT"

for loop in `echo $ENDPRINT|tr '\t' ' '`

do

awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE

done

}

#顯示的多個文件名將多行的回車符轉成逗號分隔符

CONFIGFILES=`ls $1|tr '\n' ','`

#查看到底有多個配置文件

_Num=`echo $CONFIGFILES|tr -cd \,|wc -c`

#臨時變量保存配置多個文件

_TMPFILES=$CONFIGFILES

while [ $_Num -ge 1 ]

do

#得到一個文件

CONFIGFILE=`echo $_TMPFILES|cut -d ',' -f1`

#余下的文件

_TMPFILES=`echo $_TMPFILES|cut -d ',' -f2-`

#配置文件數量減一

_Num=$(($_Num-1))

echo "========================================================"

#文件名稱

echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"

profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`

#對于一個配置文件中的所有id循環

for OneCom in $profile

do

echo "--------------------------------------------------"

echo "COM:$OneCom"

getconfig? $OneCom? $CONFIGFILE

echo "\n"

echo "--------------------------------------------------"

#break

done

echo "========================================================"

done

兩個小時終于寫好了,請各位轉載的時候不要忘記加上我的地址哦,也不枉費我辛苦一場。

總結

以上是生活随笔為你收集整理的Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。