Shell脚本读取配置文件
这里参考了下面这篇博客
https://blog.csdn.net/liubeck/article/details/7497156
不过按照上面的代码好像有点问题,后来搞了半天实现了需求。
配置文件为myconfig.ini
[Class]
ids=student1,student2,student3
files=profilefile
[student1]
name=LiLei
age=16
[student2]
name=HanMeiMei
age=15
[student3]
name=Lucy
age=15
如何取[student1]下面name的值呢?用下面这行代码:
awk -F '=' '/\[student1\]/{a=1}a==1&&$1~/name/{print $2;exit}' myconfig.ini
这句指令涉及到的内容挺多的,查了半天才搞明白,详细解释一下:
-
首先这句指令用了awk命令,awk命令通常是将所列出的行,根据条件打印出某一列或几列,想多了解的话可以参考下网上资料
https://www.cnblogs.com/ftl1012/p/9250541.html -
“-F” 是awk命令的一个选项,用来指定后面记录(行)的分隔符号,就是确定用什么作为分隔符号把记录分成一个一个的域,这里后面跟的 ‘=’ 表示用等号来分隔。
-
再往后单引号中间是awk命令,awk命令由模式和动作组成,模式是一组用来测试输入行是否需要执行动作的规则,动作是包含语句、函数和表达式的执行过程,简单来说就是模式决定动作何时触发和触发事件,动作执行对输入行的处理。
-
/ \ [student1 \ ]/ 这就是上面说的awk命令的模式,模式与动作之间用 / 来分开,表示匹配到这个模式的话执行后面的动作,这里要匹配的是 [strudent1] ,因为方括号[ ] 在shell中有特殊的意义,使用转义符号\ 表示单纯的 [ ] 符号,所以这里就是[strudent1] 。
-
{a=1} 花括号里面的内容是awk命令的动作,这里就是给a赋值为1.
-
a==1&&$1~/name/ 这里又是一个模式匹配,先是判断a是否等于1(因为刚才已经给a赋值为1,所以这里肯定相等),还要$1~/name/,$1表示第一域,就是字符串用分隔符号分割后的第一段, ~ 符号在awk命令中是关系运算符号,表示匹配正则表达式,这里就是要第一域为name
-
{print $2;exit} 这里又是一个动作,打印第二域,即第一域name的取值,然后退出awk命令。
-
myconfig.ini