bash script to generate config or property file from a template file containing variables

Sometimes we have configuration or properties file (as templates) such as httpd.conf or server.conf where we want to dynamically replace $variables with values before writing the output to a new file.


# httpd.conf.tmpl

    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from $MONITOR_IP

We want to develop an install script in Bash such that it reads the httpd.conf.tmpl and replaces the $STATUS_URI and $MONITOR_IP with appropriate values (either passed in as script arguments or coded in the bash script) and then write out the resulting output to a new file such as /tmp/httpd.conf

Here is such as script:

#!/usr/bin/env bash

# Define the variables with values you want replaced
# This could also be read in via bash arguments. 
# Google "bash getopts" for more information

# render a template configuration file
# expand variables + preserve formatting
# user="Venkatt"
# referenced inside the template.txt as $user
# render_template /path/to/template.txt > path/to/configuration_file
function render_template() {
  eval "echo \"$(cat $1)\""

function generate_httpd_conf {
  echo "#### Creating /tmp/httpd.conf from template ./httpd.conf.tmpl"
  render_template httpd.conf.tmpl > /tmp/httpd.conf

Generated output:

    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from

This can be a useful method to generate .conf .prop (configuration or properties) files.


And now for today’s inspirational quote:

Let us sacrifice our today so that our children can have a better tomorrow. - [Abdul Kalam]( - 11th President of India from 2002 to 2007 - Chief 'Rocket' Scientist born from a poor family with humble beginnings. - Lived as a "Man of simplicity"