linux ini文件,Shell script - Linux下解析ini配置文件
導語Linux 有時候需要統計多臺主機上面的數據,比如合并N多主機的日志,然后進行下一步的分析。這個時候如果直接把所有主機IP寫死到腳本中的話,下次新增一臺主機,就需要再去修改腳本,如果涉及到多個腳本的話,這樣的操作將會大大浪費我們的時間這個時候我們可以考慮把用到的主機列表配置到一個文件中,然后通過一個函數來解析它,以后修改就只用修改這個配置文件就好了當然處理封裝到公共的腳本中外,我們也可以將其封裝成一個單獨的命令,詳見最后部分 作為定制化工具
公用函數腳本
listIniSectionsDesc:
列舉配置文件中所有的section名稱
Usage:
listIniSections?ini-config-file
listIniKeysDesc:
列舉配置文件中?給定的section?下所有的key名稱
Usage:
listIniSections?ini-config-file?section-name
listIniValuesDesc:
列舉配置文件中?給定的section?下所有的value名稱
Usage:
listIniSections?ini-config-file?section-name
listIniKeysValuesDesc:
列舉配置文件中?給定的section?下所有的key?和?value名稱
Usage:
listIniSections?ini-config-file?section-name
腳本##?定義一個公用的腳本,把常見的函數放到里面,別的腳本就可以引用然后調用##?類似于面向對象語言的包含文件vim?/devOps/shell/common/functions#!/usr/bin/env?bash?####?2016-05-12##?得到ini配置文件所有的sections名稱##?listIniSections?"filename.ini"##listIniSections()
{
inifile="$1"
#?echo?"inifile:${inifile}"
#?#?exit
if?[?$#?-ne?1?]?||?[?!?-f?${inifile}?]????then
echo??"file?[${inifile}]?not?exist!"
exit
else
sections=`sed?-n?'/\[*\]/p'?${inifile}??|grep?-v?'^#'|tr?-d?[]`????????echo??"${sections}"
fi}####?2016-05-12##?得到ini配置文件給定section的所有key值##?ini中多個section用空行隔開##?listIniSections?"filename.ini"?"section"##?listIniKeys()
{
inifile="$1"
section="$2"
if?[?$#?-ne?2?]?||?[?!?-f?${inifile}?]????then
echo??"ini?file?not?exist!"
exit
else
keys=$(sed?-n?'/\['$section'\]/,/^$/p'?$inifile|grep?-Ev?'\[|\]|^$'|awk?-F'='?'{print?$1}')????????echo?${keys}
fi}####?2016-05-12##?得到ini配置文件給定section的所有value值##?ini中多個section用空行隔開##?listIniSections?"filename.ini"?"section"##?listIniValues()
{
inifile="$1"
section="$2"
if?[?$#?-ne?2?]?||?[?!?-f?${inifile}?]????then
echo?"ini?file?[${inifile}]!"
exit
else
values=$(sed?-n?'/\['$section'\]/,/^$/p'?$inifile|grep?-Ev?'\[|\]|^$'|awk?-F'='?'{print?$2}')????????echo?${values}
fi}##?2016-06-01##?得到ini配置文件給定section的所有key?-?value值##?ini中多個section用空行隔開##?listIniSections?"filename.ini"?"section"##?listIniKeysValues()
{
inifile="$1"
section="$2"
if?[?$#?-ne?2?]?||?[?!?-f?${inifile}?]????then
echo?"ini?file?[${inifile}]!"
exit
else
values=$(sed?-n?'/\['$section'\]/,/^$/p'?$inifile|grep?-Ev?'\[|\]|^$'|awk?-F'='?'{print?$1,?$2}')????????echo?${values}
fi}
具體實例
ini格式配置文件root@pts/2?$?cat?hostList.ini
[juepei]
web1=192.168.88.2web2=192.168.88.15[miaowu]
web1=192.168.200.2web2=192.168.200.3
測試腳本root@pts/0?$?cat?20160620.sh
#!/usr/bin/env?bash
source?/devOps/shell/common/functionsiniconfig="/tmp/liuchao/hostList.ini"echo?"list?all?sections"listIniSections?${iniconfig}echo?-e?"\nlist?section?[juepei]?keys"listIniKeys?${iniconfig}?juepeiecho?-e?"\nlist?section?[juepei]?values"listIniValues?${iniconfig}?juepeiecho?-e?"\nlist?section?[miaowu]?keys?and?values"listIniKeysValues?${iniconfig}?juepei
測試結果root@pts/0?$?bash?20160620.sh
list?all?sections
juepei
miaowulist?section?[juepei]?keys
web1?web2list?section?[juepei]?values192.168.88.2?192.168.88.15list?section?[miaowu]?keys?and?values
web1?192.168.88.2?web2?192.168.88.15
作為定制化工具#!/usr/bin/env?bash#?-*-?coding:?utf-8?-*-#Filename:??lc_parseINI#Author:????????Liuchao#Email:?????137642091@qq.com#Date:??????2016-06-20#Desc:??????Linux下解析INI?格式的配置文件#source?/devOps/shell/common/functionsecho?"$1?-?$2?-?$3"##?如果沒有指定參數或者給出的參數大于2則輸入用法if?[?$#?-gt?3?]?||?[?$#?-lt?1?]then
echo?"Usage:`basename?$0`?[-s/-k/-v/-a]?iniconfig?[section]"
exitelse
#?param1="$1"
#?if?[?$#?-eq?1?]?&&?[?"${param1:0-3}"?=?"ini"?]
if?[?$#?-eq?1?]?&&?[?"${1:0-3}"?=?"ini"?]????then
listIniSections?"$1"
elif?[?$#?-eq?2?]?&&?[?"$1"?=?"-s"?]????then
listIniSections?"$2"
elif?[?$#?-eq?3?]?&&?[?"$1"?=?"-s"?]????then
listIniSections?"$2"
elif?[?$#?-eq?3?]?&&?[?"$1"?=?"-a"?]????then
listIniKeysValues?"$2"?"$3"
elif?[?$#?-eq?3?]?&&?[?"$1"?=?"-k"?]????then
listIniKeys?"$2"?"$3"
elif?[?$#?-eq?3?]?&&?[?"$1"?=?"-v"?]????then
listIniValues?"$2"?"$3"
else
echo?"You?enter?wrong?params!"
echo?"Usage:`basename?$0`?[-s/-k/-v/-a]?iniconfig?section"
exit
fifi
作者:全棧運維
鏈接:https://www.jianshu.com/p/a9a93f92084b
總結
以上是生活随笔為你收集整理的linux ini文件,Shell script - Linux下解析ini配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 优化分组 sql语句,Or
- 下一篇: linux下python版本升级,lin