随着linux接触的越来越多,我们难免需要从一些配置文件中进行读取配置参数,linux中shell属于脚本型语言,读取时没有其它语言方便,特将用过的一种方式分享给大家
实战代码
$ more a.txt
name=hello world
age=22
ip=192.168.1.1
$ sed '/^name=/!d; s/.*=//' a.txt
hello world
$ sed '/^age=/!d; s/.*=//' a.txt
22
$ sed '/^ip=/!d; s/.*=//' a.txt
192.168.1.1
命令讲解
以sed '/^name=/!d; s/.*=//' a.txt
为例,这里面实际上执行了2次sed分别是
$ sed '/^name=/!d ' a.txt
name=hello world
bogon:temp didi$ sed 's/.*=//' a.txt
hello world
22
192.168.1.1
聪明伶俐的你一定看出来了,2次sed是以“;”进行分开执行的,
前面的’/^name=/!d '属于正则匹配,得到满足规则的行
后面的’s/.*=//'属于正则替换,将“=”及“=”前面的内容替换掉(由于//之间没有内容,相当于将“=”及“=”前面的内容删除掉)
命令封装成公共脚本或者函数
每次都这么复杂的获取配置值sed '/^name=/!d; s/.*=//' a.txt
是不是觉得很麻烦很low呀,接下来我带大家封装成一个公共脚本吧
$ more getval.sh
configfile=$1
key=$2
sed "/^$key=/"'!d; s/.*=//' $configfile
$ ./getval.sh a.txt name
hello world
$ ./getval.sh a.txt age
22
$ ./getval.sh a.txt ip
192.168.1.1
脚本内容讲解
比较奇怪的是就是这个命令了
sed "/^$key=/"'!d; s/.*=//' $configfile
为什么既有双引号又有引号呢,先科普下吧
- 单引号:
可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看见的是什么就会输出什么。 - 双引号:
把双引号内的内容输出出来;如果内容中有命令,变量等,会先把变量,命令解析出结果,然后在输出最终内容来。
其中命令$key
是需要解析出结果的,而命令!d
我们不需要解析出结果的,所以上面我们分别采用了双引号和单引号来解决这个问题,如是还没有看懂的话可以私信我哈