1. 程式人生 > >linux shell 指令碼讀取 ini 配置檔案(命令部分詳解)

linux shell 指令碼讀取 ini 配置檔案(命令部分詳解)

wanxiaoderen: 這句 判斷理解難度略高,查資料半天后,我來解釋下 (awk的使用(不瞭解的可以掃盲)http://blog.chinaunix.net/uid-23302288-id-3785105.html)

  1. ReadINI=`awk -F '=' '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}' $Configfile  

-F '分隔符' 操作命令 被操作檔案

------------------------------------------------------------------------------------------------------------

-F '=' 對每行進行劃分 每行起始字串設為 $1 遇到 ‘=’ 自動設為$2 依次類推

------------------------------------------------------------------------------------------------------------

操作命令 '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}' 其實是 comand1 && comand2 把兩個條件連結到一塊

------------------------------------------------------------------------------------------------------------

command1 ---- '/\['$Section'\]/{a=1}a==1&& /\['$Section'\]/ 一個匹配字串

------------------------------------------------------------------------------------------------------------

{a=1}a==1 一個恆等式而已 永為true 也就是說 {b=1}b==1也行 command1的總體效果會篩選出 【sectionname】(包括自己)後的所有欄位(目前【不清楚】為什麼一個‘/匹配/Ture/'會匹配到所有後續欄位,如果只有一個/匹配/ 只會匹配到一行)

------------------------------------------------------------------------------------------------------------

command2  :command1會生成N多行,每行用‘=’分隔依次生成 $1 $2 $3.... $1~/$key/ 匹配含有 $key變數的 行,但是問題是 如果section1後面有個 key1 = 5;section2 在section後也有個 key1 = 6 ; 假如 key =key1 會將後面所有含有key1的行全部找出來,為了解決這個問題,後面有處理

------------------------------------------------------------------------------------------------------------

由於是ini檔案,所以只需要 $2 所以打印出 print $2 當然也可以 print $1,為了解決上述問題,附加了exit 保證了只打一行就退出

------------------------------------------------------------------------------------------------------------

上述的解釋中還有一個【不清楚的地方】,那個大佬能解答下,而且應該有更優的匹配方式