您好,登錄后才能下訂單哦!
本篇內容介紹了“Shell腳本讀取ini配置文件的實現方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、簡單版
參考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
“Shell腳本讀取ini配置文件的實現方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。