linux shell 脚本读取 ini 配置文件(命令部分详解)

原文:https://blog.csdn.net/zeweig/article/details/42554099

wanxiaoderen: 这句 判断理解难度略高,查资料半天后,我来解释下 (awk的使用(不了解的可以扫盲)http://blog.chinaunix.net/uid-23302288-id-3785105.html)

[plain] view plain copy

  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 保证了只打一行就退出

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

上述的解释中还有一个【不清楚的地方】,那个大佬能解答下,而且应该有更优的匹配方式

猜你喜欢

转载自blog.csdn.net/wanxiaoderen/article/details/82253714