BashでマークダウンっぽいものをHTMLに変換するシェルスクリプトを作ってみた。





マークダウンを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


これで以上になります。