マークダウンをhtmlに変換した後の値を代入するための変数resultを用意します。
result=""
マークダウンファイルの内容を読み込み1行ずつ処理するためにwhile文を使います。
while文にsample.mdの内容をリダイレクトさせます。
これでファイルの中身を1行ずつ表示することができます。
while read line; do
echo $line
done < sample.md
sample.md
# Hello World
## Hello World
実行結果
# Hello World
## Hello World
取得した行を配列に変換します。
今回は、マークダウンの記号で先頭にあるもののみを扱うので、行の先頭の部分を取得します。
line=($line)
mark=${line[0]}
マークダウンを書く時に用いる記号と文章を分けて配列に格納します。
先頭の記号を取り除いたものを文章としてcontentに代入しています。
line=(${line[@]:1})
content=${line[@]}
先頭の記号が代入されている変数markをcase文に入れて処理します。
case $mark in
"#")
result+="<h1>${content}</h1>\n"
;;
"##")
result+="<h2>${content}</h2>\n"
;;
*)
result+=${line[@]}
;;
esac
読み込んだマークダウンのファイルをHTMLに変換して、HTMLファイルに書き込みます。
echo -e $result > index.html
index.htmlを開いてみるとhtmlタグが書き込まれています。
<h1>Hello World</h1>
<h2>Hello World</h2>
全体のコードです。
#!/bin/bash
result=""
while read line; do
line=($line)
mark=${line[0]}
line=(${line[@]:1})
content=${line[@]}
case $mark in
"#")
result+="<h1>${content}</h1>\n"
;;
"##")
result+="<h2>${content}</h2>\n"
;;
*)
result+=${line[@]}
;;
esac
done < sample.md
echo -e $result > index.html
これで以上になります。