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

首頁 > 系統 > Linux > 正文

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

2019-10-26 18:41:37
字體:
來源:轉載
供稿:網友

一、簡單版

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宽城| 绥芬河市| 饶河县| 通州区| 双辽市| 若尔盖县| 仁寿县| 商丘市| 鸡东县| 罗平县| 新源县| 平利县| 额敏县| 九寨沟县| 巨野县| 凌源市| 吉水县| 永和县| 青海省| 当雄县| 三门县| 奎屯市| 张北县| 松溪县| 凤山县| 黑龙江省| 潮安县| 古蔺县| 慈利县| 佛冈县| 沅江市| 淳安县| 微博| 慈溪市| 临泽县| 阳东县| 申扎县| 康乐县| 临沧市| 南木林县| 吉安市|