ShellScript
Bash

readコマンドなどを使って、txtファイルを読み込み、HTMLファイルを作成する!要はshellscriptを使って流し込みをする。

Web制作などをすると、
流し込みという、原稿を渡されて、原稿のテキストをHTMLに成形?する作業あるじゃないですか?

今思えば、流し込む原稿の内容HTMLのテンプレート的なが揃ってたら(内容が決まっていたら)、shellscriptで一瞬じゃないか。

と思い試してみました。:angel_tone2:

shellscript

create_html.sh
#!/bin/bash

createHtmlFile()
{
  local textFile="$1"

  # パターンにマッチした部分を取り除いた値に展開する、パラメータ展開
  # ここでは、後方一致のパターンにパス名展開を使い
  # パターンにマッチした拡張子を取り除いて、展開し、
  # 末尾にhtmlの拡張子を追加し、htmlFile変数へ代入。
  local htmlFile="${textFile%%.*}.html"

  # 空のhtmlDrafts配列を作成
  local htmlDrafts=()
  local htmlTemplate=

  while read -r textLine
  do
    # readコマンドで1行分textFile変数(テキストファイル)から、
    # 文字列を読み取って、
    # その内容をtextLine変数へ代入し、
    # textLine変数を配列の要素として、
    # htmlDrafts配列に追加する。
    htmlDrafts+=("$textLine")
  done < "$textFile"

  # ヒアドキュメントを使いシェルスクリプト本体に
  # 配列の要素を参照したテキスト(HTMLの雛形)を埋め込む、
  # 埋め込んだテキストをcatコマンドの標準入力として利用し、
  # コマンド置き換えを実行して、catコマンドの出力を文字列に展開し
  # htmlTemplate変数へ代入。
  htmlTemplate=$(cat << END
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>${htmlDrafts[0]}</title>
</head>
<body>
  <h1>${htmlDrafts[1]}</h1>
  <p>${htmlDrafts[2]}</p>
</body>
</html>
END
)
  # シェルのリダイレクト機能を使って、
  # ptintfコマンドの標準出力先をhtmlFileへ出力し、
  # HTMLファイルを作成する。
  printf '%s\n' "$htmlTemplate" > "$htmlFile"
}

for i in "$@"
do
  createHtmlFile "$i"
done

使い方

カーレントディレクトリに以下のファイルがあるとします。

  • create_html.sh
  • sample.txt
$ ./create_html.sh sample.txt

これで、OKです。

実行後↓のように表示されるかと思います。

$ ls
create_html.sh sample.html    sample.txt

sample.txtの内容は以下のような内容です。
sample001.png

shellscriptで作成したHTMLファイルです。
sample002.png

終わりに

今回は、とてもシンプルにしましたが、もう少し改良しようかと思います。
よかったら改良して使ってみてください!:clap:
https://github.com/masanorifunaki/create_html