Bash脚本生成HTML模板

时间:2016-03-28 06:27:17

标签: bash

我想要一个生成HTML模板的Bash脚本。该模板将包含基于命令行输入参数的库。这是我的想法:

#!/bin/bash

function libraries
{
  if [ "$1" == "bootstrap" ]; then
      echo "<link type="text/css" rel="stylesheet" href="css/bootstrap.css" />"
  fi
}

##### Main

cat << _EOF_
  <!DOCTYPE html>
  <html>
  <head>
      <title> </title>
      $(libraries)
  </head>

  <body>

  </body>
  </html>
_EOF_

当我运行./template_creator.sh bootstrap时,我得到了这个输出:

<!DOCTYPE html>
  <html>
  <head>
      <title> </title>

  </head>

  <body>

  </body>
  </html>

如果我不包含if语句而只包含echo,则输出正常。所以我认为麻烦在if语句中。有什么建议?

3 个答案:

答案 0 :(得分:2)

您可以使用printf在模板中注入变量。

在模板中使用printf格式(例如%s)作为插入点。

这样您甚至可以使用文件作为模板(使用tpl=$(cat "main.tpl"调用它)并在脚本中处理变量。

libraries() {
  if [ "$1" == "bootstrap" ]; then
      link='<link type="text/css" rel="stylesheet" href="css/bootstrap.css" />'
      printf "$tpl" "$link"
  fi
}

##### Main

read -d '' tpl << _EOF_
  <!DOCTYPE html>
  <html>
  <head>
      <title> </title>
      %s
  </head>

  <body>

  </body>
  </html>
_EOF_

libraries "$1"

答案 1 :(得分:1)

而不是$(libraries)$(libraries) $1

答案 2 :(得分:1)

在函数内部,$1指向传递给该函数的第一个参数,而不是传递给脚本的第一个参数。您可以使用here-document中的$(libraries "$1")将脚本的第一个参数传递给函数,或者将其分配给脚本开头的全局变量,然后在函数中使用它。