最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年08月05日 10:18:16   投稿:junjie  
這篇文章主要介紹了Shell腳本讀取ini配置文件的實(shí)現(xiàn)代碼2例,如果只是讀取內(nèi)容推薦使用簡單版,有更多需求請見復(fù)雜版,需要的朋友可以參考下

一、簡單版

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

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

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

這樣就簡單取到值了。
查了下命令終于明白,命令分為兩個(gè)部分:
先模式匹配到:[com1]然后執(zhí)行動作:a=1,再接著有來個(gè)模式+命令
模式:“a==1&&$1~/key/”
a==1因?yàn)橐呀?jīng)賦值了,所以執(zhí)行下一步,如果$1第一個(gè)字段匹配key的值,則
打印第2項(xiàng),緊接著退出,退出就不會打印到匹配[com2]和[com3]的key值.
 
需求會變得,現(xiàn)在變成取【com】幾個(gè)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里面的常量,因?yàn)?為正則表達(dá)式的特殊字符,雙引號,標(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把,號分隔改成空格,因?yàn)檠h(huán)內(nèi)容要以空格分隔開來
profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
#對于一個(gè)配置文件中的所有id循環(huán)
for OneCom in $profile
do
  echo "--------------------------------------------------"
  echo "COM:$OneCom"
  #此處函數(shù)調(diào)用有時(shí)候不能用反引號,不然會出錯(cuò),此處原由還不清楚知道的麻煩請告之
  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è)文件名將多行的回車符轉(zhuǎn)成逗號分隔符
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'`
  #對于一個(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í)終于寫好了,請各位轉(zhuǎn)載的時(shí)候不要忘記加上我的地址哦,也不枉費(fèi)我辛苦一場。

相關(guān)文章

  • 每天一個(gè)linux命令之locate 命令

    每天一個(gè)linux命令之locate 命令

    locate命令可以在搜尋數(shù)據(jù)庫時(shí)快速找到檔案,數(shù)據(jù)庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,這篇文章主要介紹了每天一個(gè)linux命令之locate 命令的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Shell編程之變量的高級用法詳解

    Shell編程之變量的高級用法詳解

    這篇文章主要介紹了Shell編程之變量的高級用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • shell 創(chuàng)建子進(jìn)程及并行延時(shí)執(zhí)行命令方法

    shell 創(chuàng)建子進(jìn)程及并行延時(shí)執(zhí)行命令方法

    本文主要介紹了shell 創(chuàng)建子進(jìn)程及并行延時(shí)執(zhí)行命令方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Linux共享內(nèi)存實(shí)現(xiàn)機(jī)制的詳解

    Linux共享內(nèi)存實(shí)現(xiàn)機(jī)制的詳解

    這篇文章主要介紹了Linux共享內(nèi)存實(shí)現(xiàn)機(jī)制的詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • linux 獲取某個(gè)日期對應(yīng)的月末日期方法

    linux 獲取某個(gè)日期對應(yīng)的月末日期方法

    今天小編就為大家分享一篇linux 獲取某個(gè)日期對應(yīng)的月末日期方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Linux Shell字符串變量拼接與賦值的使用

    Linux Shell字符串變量拼接與賦值的使用

    本文主要介紹了Linux Shell字符串變量拼接與賦值的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 使用Shell 腳本實(shí)現(xiàn)每隔100行插入一條記錄且記錄第一列包含行號其他列不變

    使用Shell 腳本實(shí)現(xiàn)每隔100行插入一條記錄且記錄第一列包含行號其他列不變

    本文通過實(shí)例代碼給大家講解了使用Shell 腳本實(shí)現(xiàn)每隔100行插入一條記錄且記錄第一列包含行號其他列不變的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2016-12-12
  • 詳解shell數(shù)組${arr[*]}和${arr[@]}區(qū)別

    詳解shell數(shù)組${arr[*]}和${arr[@]}區(qū)別

    本文主要介紹了詳解shell數(shù)組${arr[*]}和${arr[@]}區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 如何使用shell獲取進(jìn)程名的內(nèi)存以及CPU利用率

    如何使用shell獲取進(jìn)程名的內(nèi)存以及CPU利用率

    最近工作中遇到一個(gè)需求,需要找出占用高的進(jìn)程,所以下面這篇文章主要給大家介紹了關(guān)于如何使用shell獲取進(jìn)程名的內(nèi)存以及CPU利用率的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 幾個(gè)常用的Linux操作系統(tǒng)監(jiān)控腳本代碼

    幾個(gè)常用的Linux操作系統(tǒng)監(jiān)控腳本代碼

    本文介紹了幾個(gè)常用的Linux監(jiān)控腳本,可以實(shí)現(xiàn)主機(jī)網(wǎng)卡流量、系統(tǒng)狀況、主機(jī)磁盤空間、CPU和內(nèi)存的使用情況等方面的自動監(jiān)控與報(bào)警。根據(jù)自己的需求寫出的shell腳本更能滿足需求,更能細(xì)化主機(jī)監(jiān)控的全面性
    2013-07-07

最新評論

星子县| 北安市| 武陟县| 霍邱县| 永嘉县| 太谷县| 得荣县| 武乡县| 纳雍县| 论坛| 琼海市| 黎城县| 麻城市| 沾化县| 噶尔县| 吉水县| 定边县| 新绛县| 平和县| 安仁县| 白银市| 宜良县| 陇南市| 和静县| 桓仁| 兴安盟| 新绛县| 繁峙县| 临汾市| 兴安盟| 静海县| 木里| 澳门| 罗田县| 宁蒗| 遵化市| 河东区| 安阳市| 安吉县| 五寨县| 江安县|