shell學習 從ini檔案中讀取引數

2021-08-14 20:41:19 字數 1409 閱讀 9007

打算編寫乙個shell指令碼來自動備份**,需要從配置檔案中讀取一些引數,比如資料庫名稱、使用者名稱和密碼等。我分析了一下wdcp自帶的資料庫備份指令碼mysqlbackup.sh,裡面僅僅從檔案mrpw.conf中讀取了資料庫密碼,只用到了cat而已:

mrpw=`cat /www/wdlinux/wdcp/conf/mrpw.conf`
這個方法雖然簡易,但總不能每乙個引數都用乙個檔案來儲存吧。現在很多軟體的配置引數都是用ms ini檔案來儲存的,使用方便而且可讀性非常好,所以我在網上找了乙個shell讀取ini檔案的方法,本文則是對該方法的學習總結。

[section1]

name1 = value1

name2 = value2

[section2]

name3 = value3

中括號裡面是節,name是鍵名,value是鍵值

實現讀取ini檔案的函式**看起來比較簡單:

function readini

()a==1&&$1~/'

$key

'/'$filename`

echo

$result

}

呼叫方法(從名為filename的檔案中讀取section節中的key鍵值儲存到變數value中):

value=$(readini filename section key)
解析:

readini()函式接收三個引數分別傳給filename、section和key,然後呼叫awk命令在檔案中查詢指定鍵值。這裡最重要的就是awk命令:

awk -f '='

'/\['

$section

'\]/a==1&&$1~/'

$key

'/'$filename

-f '='表示用「=」作為分割符(多餘的空格同樣會被忽略);

/\['$section'\]//'$key'/是正規表示式,用於匹配節名和鍵名,注意在awk正規表示式中引數要用單引號括起來;

/\['$section'\]/表示逐行搜尋到目標節時用變數a標記下來;

a==1&&$1~/'$key'/表示當目標節已找到(a==1)並且當前行第乙個引數匹配鍵名時,列印第二個引數(鍵值)並退出,這裡exit是為了防止後面其它節有相同的鍵名。

注意:

該方法的乙個缺陷是,如果節名和鍵名都存在但目標鍵並不在目標節下時會返回錯誤的搜尋結果,因此在寫ini檔案的時候需要注意。

shell讀寫ini檔案

實現了讀,寫以及讀取ini檔案段的功能,還可以更豐富,僅當拋磚引玉。readini a 1 1 echo writeini a 1 1 a 0 1 readinisections sed s g sed s g echo 使用方法 version.ini檔案如下 version file os ve...

Shell中同時讀多個檔案

有時需要提取檔案中的乙個或多個列元素生成新的檔案,這一操作在 shell 裡很容易實現。比如有乙個資料檔案 data,有三列資訊 姓名 學號 班級。redraiment 0612800134 0601 christine 0612800136 0601 zb 0612800229 0602 現在需要...

語言 讀ini檔案 檔案包含漏洞 上

伺服器執行php檔案時,可以通過檔案包含函式載入另乙個檔案中的php 並且當php來執行。有效避免防火牆的查殺。1 require 2 require once 3 include 4 include once include和require區別主要是,include在包含的過程中如果出現錯誤,會丟...