亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

Shell腳本讀取ini配置文件的實現代碼2例

2020-07-27 19:14:17
字體:
來源:轉載
供稿:網友

一、簡單版

參考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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人精品在线视频| 国产一区二区黑人欧美xxxx| 日韩av电影在线网| 中文字幕亚洲专区| 亚洲二区在线播放视频| 91精品免费看| 亚洲国语精品自产拍在线观看| 国产精品自拍网| 国产精品第2页| 国产一区二区三区视频免费| 久久99国产精品久久久久久久久| 国产精品日韩欧美大师| 北条麻妃一区二区在线观看| 奇米4444一区二区三区| 精品动漫一区二区三区| 午夜免费在线观看精品视频| 91精品国产精品| 欧美日韩裸体免费视频| 韩日欧美一区二区| 国产91亚洲精品| 青青在线视频一区二区三区| 亚洲高清在线观看| 亚洲福利视频网站| 欧洲成人免费aa| 欧美黄色三级网站| 亚洲国产成人精品久久久国产成人一区| 亚洲国内精品在线| 欧美裸体xxxx极品少妇软件| 亚洲一区二区三区xxx视频| 51色欧美片视频在线观看| 欧美在线免费看| 97视频在线观看免费高清完整版在线观看| 国产亚洲成av人片在线观看桃| 日韩人体视频一二区| 国产精品入口福利| 一区二区中文字幕| 日韩精品中文字幕视频在线| 日韩精品极品毛片系列视频| 久久久在线免费观看| 亚洲午夜未满十八勿入免费观看全集| 日本国产高清不卡| 日韩av在线导航| 国产91精品久久久久| 亚洲欧美激情一区| 亚洲色图国产精品| 清纯唯美日韩制服另类| 亚洲www在线观看| 中文字幕亚洲国产| 国产精品视频区1| 影音先锋欧美在线资源| 一区二区三区www| 成人激情视频在线播放| 欧美一区三区三区高中清蜜桃| 精品国产电影一区| 97婷婷涩涩精品一区| 色香阁99久久精品久久久| 国产综合色香蕉精品| 亚洲国产精品悠悠久久琪琪| 51午夜精品视频| 国内外成人免费激情在线视频| 国模吧一区二区| 色哟哟网站入口亚洲精品| 欧美精品在线视频观看| 国产欧美一区二区三区四区| 亚洲国产91精品在线观看| 精品无人区太爽高潮在线播放| 日韩电影在线观看永久视频免费网站| 北条麻妃一区二区三区中文字幕| 亚洲一区二区三区四区在线播放| 中文字幕日韩精品在线观看| 8x拔播拔播x8国产精品| 欧美大学生性色视频| 国产精品久久9| 国产在线视频一区| 亚洲国产福利在线| 色播久久人人爽人人爽人人片视av| 亚洲第一综合天堂另类专| 色哟哟网站入口亚洲精品| 亚洲新中文字幕| 亚洲精品有码在线| 日韩一级黄色av| 日韩亚洲第一页| 91精品国产91久久久久久不卡| 性欧美长视频免费观看不卡| 精品色蜜蜜精品视频在线观看| 亚洲偷欧美偷国内偷| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲国产成人久久综合| 色综合久久88色综合天天看泰| 视频在线一区二区| 国产日韩视频在线观看| 国产精品中文字幕在线观看| 亚洲精品女av网站| 国产日韩中文字幕| 亚洲精品久久久久久下一站| 91精品美女在线| 97人洗澡人人免费公开视频碰碰碰| 国产精品一区二区久久久| 色天天综合狠狠色| 91日韩在线视频| 91精品国产高清久久久久久| 久久亚洲精品国产亚洲老地址| 91在线观看免费高清完整版在线观看| 91福利视频在线观看| 91国偷自产一区二区三区的观看方式| 欧美在线亚洲在线| 97在线视频免费观看| 91国产精品视频在线| 精品福利樱桃av导航| 欧美成人剧情片在线观看| 精品福利樱桃av导航| 亚洲国产精品高清久久久| 精品久久久久国产| 69久久夜色精品国产69乱青草| 久久免费福利视频| 欧美色欧美亚洲高清在线视频| 久久人人爽人人爽人人片亚洲| 亚洲精品久久久久久久久久久| 亚洲第一区在线| 久久这里只有精品视频首页| 亚洲色图美腿丝袜| 成人在线小视频| 欧美日韩国产成人| 成人在线激情视频| 欧美日韩加勒比精品一区| 精品国产乱码久久久久久虫虫漫画| 日本中文字幕不卡免费| 精品国产一区二区三区久久久狼| 国产精品一区二区久久久久| 亚洲高清一区二| 欧美洲成人男女午夜视频| 欧美一级片久久久久久久| 精品无人区太爽高潮在线播放| 亚洲一区二区久久| 98午夜经典影视| 成人免费观看a| 91精品国产九九九久久久亚洲| 精品视频在线导航| 欧美日韩一二三四五区| 国产精品免费小视频| 成人免费观看49www在线观看| 欧美激情精品久久久久久黑人| 亚洲人成免费电影| 欧美激情va永久在线播放| 欧美尺度大的性做爰视频| 最近中文字幕2019免费| 性欧美视频videos6一9| 欧美精品九九久久| 欧美国产亚洲精品久久久8v| 欧美日韩国产二区| 欧美日韩精品在线播放| 国产精品综合网站| 欧美香蕉大胸在线视频观看| 亚洲美女喷白浆| 午夜精品久久久99热福利| 国产精品影片在线观看| 国产在线一区二区三区| 亚洲精品动漫100p| 国产视频久久久久| 另类专区欧美制服同性| 亚洲精品久久久久久久久| 欧美日产国产成人免费图片| 日韩在线视频观看正片免费网站| 欧美日韩美女在线观看|