shell定义带变量的模板,直接修改变量,用这种方法再也不用担心正则匹配不准的问题了
2018-03-13 09:56
603 查看
之前用shell 写脚本,有时候不光要定义一个 配置文件,很多时候还要有个模板,不同的环境直接替换相同的模板内容来用;然而,在这之前,一直都是用的 sed 、 awk 、grep 之类的。忽然有一天有个 yaml 文件,里面要替换的太多,sed 太麻烦,用这种方法,不知道要少写多少正则。。。
淡不多扯,我给大家伙上一个例子:
创建一个模板,在模板内直接写变量
vim a.model
#This is app config model
app_name=$name
app_ip=$ip
shell 脚本直接替换变量
vim b.sh
#!/bin/bash
name="bill_server"
ip="192.168.3.22"
all_variables="name=$name ip=$ip"
cp -a a.model rfile.conf
resourcefile=
printf "$all_variables\ncat << EOF\n$resourcefile\nEOF" | bash > rfile.conf
运行脚本后,查看生成的配置文件:
cat rfile.conf
#This is app config model
app_name=bill_server
app_ip=192.168.3.22
是不是很方便?如果有很多环境用一样的配置文件,用这个方法做配置文件,是不是很方便,只要把shell中的变量换成从外边传参,复制的文件也饿改成变量,就可以一下生成很多相同格式内容不同的文件了。如果这个配置文件足够长,那么省了多少正则呢?
淡不多扯,我给大家伙上一个例子:
创建一个模板,在模板内直接写变量
vim a.model
#This is app config model
app_name=$name
app_ip=$ip
shell 脚本直接替换变量
vim b.sh
#!/bin/bash
name="bill_server"
ip="192.168.3.22"
all_variables="name=$name ip=$ip"
cp -a a.model rfile.conf
resourcefile=
cat rfile.conf
printf "$all_variables\ncat << EOF\n$resourcefile\nEOF" | bash > rfile.conf
运行脚本后,查看生成的配置文件:
cat rfile.conf
#This is app config model
app_name=bill_server
app_ip=192.168.3.22
是不是很方便?如果有很多环境用一样的配置文件,用这个方法做配置文件,是不是很方便,只要把shell中的变量换成从外边传参,复制的文件也饿改成变量,就可以一下生成很多相同格式内容不同的文件了。如果这个配置文件足够长,那么省了多少正则呢?
相关文章推荐
- 选中没有选中的复选框,匹配含有某个字符串的正则,json取值的两种方法,把变量定义在外面跟里面的区别
- $_POST传值定义的变量在直接加载这个php文件的时候会报错的问题解决方法
- awk 修改 shell 变量方法
- 定义一个以is开头的全局变量利用IDEA的Getter and Setter自动生成get跟set方法出现的问题
- asp.net中eval不能定义变量的问题的解决方法
- shell中变量被定义为星号(*)后无法引用的问题
- 使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
- VBS脚本,中间用到了遍历文件夹,正则匹配。使用了 WScript.Shell 对象的几个方法。
- django[模板标签]django模板变量直接显示html代码的有关问题
- 学习ThinkPHP3.2.2:video8,控制器方法中定义的变量在模板中调用并显示
- 关于shell变量的最长匹配问题
- Linux下批量修改文件后缀名及shell脚本中匹配文件名称变量写法
- 问题(怎样在dephi中引用.net中定义的类.方法参数,参数类型为XMLdocument?我要调用此方法并把实例花的xmldocument类型的变量作为参数给它。)
- django模板变量直接显示html代码的问题
- 分享一个jquery ajax 中不能修改全局变量问题的方法
- 在SHELL中直接读取数据库中的值赋给变量解决方法
- 关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题
- shell脚本里面通过正则匹配操作字符串的问题
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- django模板变量直接显示html代码的问题