国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Linux Shell > 正文

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

2020-07-27 19:14:17
字體:
供稿:網(wǎng)友

一、簡單版

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

復(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

使用的時候:

復(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兄寫的):

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

這樣就簡單取到值了。
查了下命令終于明白,命令分為兩個部分:
先模式匹配到:[com1]然后執(zhí)行動作:a=1,再接著有來個模式+命令
模式:“a==1&&$1~/key/”
a==1因為已經(jīng)賦值了,所以執(zhí)行下一步,如果$1第一個字段匹配key的值,則
打印第2項,緊接著退出,退出就不會打印到匹配[com2]和[com3]的key值.
 
需求會變得,現(xiàn)在變成取【com】幾個key對應(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的變量需要先用雙引號,再用單引號,我想可以這樣理解,
       #單引號標(biāo)示是awk里面的常量,因為$為正則表達式的特殊字符,雙引號,標(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中的每個id把,號分隔改成空格,因為循環(huán)內(nèi)容要以空格分隔開來
profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
#對于一個配置文件中的所有id循環(huán)
for OneCom in $profile
do
  echo "--------------------------------------------------"
  echo "COM:$OneCom"
  #此處函數(shù)調(diào)用有時候不能用反引號,不然會出錯,此處原由還不清楚知道的麻煩請告之
  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 
--------------------------------------------------

 
嘿嘿需求又變了,配置文件有多個,怎么取多個文件的配置項嘛:
復(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
}
 
#顯示的多個文件名將多行的回車符轉(zhuǎn)成逗號分隔符
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-`
  #配置文件數(shù)量減一
  _Num=$(($_Num-1))
  echo "========================================================"
  #文件名稱
  echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
  profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
  #對于一個配置文件中的所有id循環(huán)
  for OneCom in $profile
  do
    echo "--------------------------------------------------"      
    echo "COM:$OneCom"
    getconfig  $OneCom  $CONFIGFILE
    echo "/n"
    echo "--------------------------------------------------"
    #break
  done
echo "========================================================"
done

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桂阳县| 钟祥市| 蒙山县| 海丰县| 淮滨县| 武强县| 望谟县| 九台市| 仪陇县| 沅陵县| 镇康县| 金川县| 宜川县| 肇庆市| 湖北省| 巨野县| 黄浦区| 天长市| 永和县| 旬阳县| 定州市| 镇平县| 南投市| 泰顺县| 新乡县| 金川县| 广宗县| 广州市| 长兴县| 介休市| 乌拉特中旗| 龙陵县| 封开县| 栾城县| 沙田区| 安化县| 尉犁县| 盐池县| 青龙| 行唐县| 图木舒克市|