主頁(yè) > 知識(shí)庫(kù) > Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例

Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例

熱門(mén)標(biāo)簽:佛山高德地圖標(biāo)注中心 陜西電銷(xiāo)卡外呼系統(tǒng)怎么安裝 百度地圖的地圖標(biāo)注 杭州機(jī)器人外呼系統(tǒng) 旅游地圖標(biāo)注大全 百度地圖標(biāo)注圖標(biāo)更換 excel地址地圖標(biāo)注 地圖標(biāo)注超出范圍怎么辦 東莞電銷(xiāo)機(jī)器人價(jià)格一覽表

一、簡(jiǎn)單版

參考stackoverflow的例子,改了一個(gè)出來(lái):

復(fù)制代碼 代碼如下:

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

使用的時(shí)候:

復(fù)制代碼 代碼如下:

${section.key}

就可以讀到變量啦。

二、復(fù)雜版

復(fù)制代碼 代碼如下:

[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兄寫(xiě)的):

復(fù)制代碼 代碼如下:
awk -F '=' '/\[com1\]/{a=1}a==1$1~/key/{print $2;exit}' config.ini

這樣就簡(jiǎn)單取到值了。
查了下命令終于明白,命令分為兩個(gè)部分:
先模式匹配到:[com1]然后執(zhí)行動(dòng)作:a=1,再接著有來(lái)個(gè)模式+命令
模式:“a==1$1~/key/”
a==1因?yàn)橐呀?jīng)賦值了,所以執(zhí)行下一步,如果$1第一個(gè)字段匹配key的值,則
打印第2項(xiàng),緊接著退出,退出就不會(huì)打印到匹配[com2]和[com3]的key值.
 
需求會(huì)變得,現(xiàn)在變成取【com】幾個(gè)key對(duì)應(yīng)的值,提供的shell的腳本如下:
復(fù)制代碼 代碼如下:

#!/bin/sh
getconfig()
{
  SECTION=$1
  CONFILE=$2
  ENDPRINT="key\tfile\t"
  echo "$ENDPRINT"
  for loop in `echo $ENDPRINT|tr '\t' ' '`
  do
       #這里面的的SECTION的變量需要先用雙引號(hào),再用單引號(hào),我想可以這樣理解,
       #單引號(hào)標(biāo)示是awk里面的常量,因?yàn)?為正則表達(dá)式的特殊字符,雙引號(hào),標(biāo)示取變量的值
       #{gsub(/[[:blank:]]*/,"",$2)去除值兩邊的空格內(nèi)容
       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中的每個(gè)id把,號(hào)分隔改成空格,因?yàn)檠h(huán)內(nèi)容要以空格分隔開(kāi)來(lái)
profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
#對(duì)于一個(gè)配置文件中的所有id循環(huán)
for OneCom in $profile
do
  echo "--------------------------------------------------"
  echo "COM:$OneCom"
  #此處函數(shù)調(diào)用有時(shí)候不能用反引號(hào),不然會(huì)出錯(cuò),此處原由還不清楚知道的麻煩請(qǐng)告之
  getconfig  $OneCom  $CONFIGFILE
  echo "\n"
  echo "--------------------------------------------------"
  #break
done
echo "========================================================"

 
執(zhí)行的結(jié)果如下:
復(fù)制代碼 代碼如下:
$ one.sh File
========================================================
+++ConfigName:File+++++++++++++++++++++++++++++++
--------------------------------------------------
COM:com1
key     file  
name    file1 
--------------------------------------------------
--------------------------------------------------
COM:com2
key     file  
name1   file2 
--------------------------------------------------
--------------------------------------------------
COM:com3
key     file  
name2   file3 
--------------------------------------------------

 
嘿嘿需求又變了,配置文件有多個(gè),怎么取多個(gè)文件的配置項(xiàng)嘛:
復(fù)制代碼 代碼如下:
#!/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
}
 
#顯示的多個(gè)文件名將多行的回車(chē)符轉(zhuǎn)成逗號(hào)分隔符
CONFIGFILES=`ls $1|tr '\n' ','`
#查看到底有多個(gè)配置文件
_Num=`echo $CONFIGFILES|tr -cd \,|wc -c`
#臨時(shí)變量保存配置多個(gè)文件
_TMPFILES=$CONFIGFILES
while [ $_Num -ge 1 ]
do
  #得到一個(gè)文件
  CONFIGFILE=`echo $_TMPFILES|cut -d ',' -f1`
  #余下的文件
  _TMPFILES=`echo $_TMPFILES|cut -d ',' -f2-`
  #配置文件數(shù)量減一
  _Num=$(($_Num-1))
  echo "========================================================"
  #文件名稱
  echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
  profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
  #對(duì)于一個(gè)配置文件中的所有id循環(huán)
  for OneCom in $profile
  do
    echo "--------------------------------------------------"      
    echo "COM:$OneCom"
    getconfig  $OneCom  $CONFIGFILE
    echo "\n"
    echo "--------------------------------------------------"
    #break
  done
echo "========================================================"
done

 
兩個(gè)小時(shí)終于寫(xiě)好了,請(qǐng)各位轉(zhuǎn)載的時(shí)候不要忘記加上我的地址哦,也不枉費(fèi)我辛苦一場(chǎng)。

您可能感興趣的文章:
  • Shell腳本中使用for循環(huán)和cat命令實(shí)現(xiàn)按順序合并文件
  • Shell逐行讀取文件的4種方法
  • shell按行讀取文件的3種方法
  • Shell腳本一次讀取文件中一行的2種寫(xiě)法
  • Shell實(shí)現(xiàn)讀取ini格式配置文件方法
  • PowerShell讀取文本文件指定行內(nèi)容的方法
  • Shell腳本讀取標(biāo)準(zhǔn)ini配置文件Demo
  • Shell腳本逐行讀取文本文件(不改變文本格式)
  • 利用Shell腳本循環(huán)讀取文件中每一行的方法詳解

標(biāo)簽:雅安 延邊 朝陽(yáng) 通遼 西藏 青島 南充 隨州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例》,本文關(guān)鍵詞  Shell,腳本,讀取,ini,配置文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章