微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用bash从模板编写脚本文件?

我正在尝试为我们的内部开发服务器自动设置站点.

目前,这包括创建系统用户,mysql用户,数据库和apache配置.我知道如何在一个bash文件中完成所有操作,但我想问一下是否有办法更干净地生成apache配置.

基本上我想要做的是生成基于模板的conf文件,类似于使用printf.我当然可以使用printf,但我认为可能有一种更干净的方式,使用sed或awk.

我不只是想使用printf的原因是因为apache配置大约有20行,并且会占用大部分bash脚本,并且使其更难阅读.

任何帮助表示赞赏.

选择标记参数的方法.一种可能性是:参数:,但任何类似的标记对都不会与模板文件的合法文本混淆.

一个sed脚本(sed,awk,perl,…)类似于以下内容

sed -e "s/:param1:/$param1/g" \
    -e "s/:param2:/$param2/g" \
    -e "s/:param3:/$param3/g" \
    httpd.conf.template > $HTTPDHOME/etc/httpd.conf

如果你有时需要编辑某些东西,有时却没有,你可能会发现在命令文件中创建相关的sed命令然后执行

{
echo "s/:param1:/$param1/g"
echo "s/:param2:/$param2/g"
echo "s/:param3:/$param3/g"
if [ "$somevariable" = "somevalue" ]
then echo "s/normaldefault/somethingspecial/g"
fi
} >/tmp/sed.$$
sed -f /tmp/sed.$$httpd.conf.template > $HTTPDHOME/etc/httpd.conf

请注意,您应该使用陷阱来确保临时不会超过其有用性:

tmp=/tmp/sed.$$  # Consider using more secure alternative schemes
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15  # aka EXIT HUP INT QUIT PIPE TERM
...code above...
rm -f $tmp
trap 0

这可确保在脚本退出删除临时文件获取最可信的信号.您可以保留先前命令的非零退出状态,并在trap 0命令后使用exit $exit_status.

原文地址:https://www.jb51.cc/bash/383502.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐