シェルスクリプトによる簡易Wikiシステム

投稿者: | 2014年5月16日

以前、PQI Air Card でも動く簡易 Wiki を書いてみました。PQI Air Card 自体、標準で Perl が動いていますし実用性はあんまりないですが、シェルスクリプトベースでも簡単に出来てしまいます。

wiki.sh

メインスクリプトです。

#!/bin/bash

dir=p
#BASENAME="/mnt/sd/DCIM/122_TREK/busybox basename"
BASENAME="basename"
tmp=`$BASENAME $QUERY_STRING`
page=${tmp:-index}

if [ "$REQUEST_METHOD" = "POST" ]; then
  read text
  echo "$text" | sed -f www.sed > $dir/$page
fi

if [ -f $dir/$page ]; then
  body=`cat $dir/$page`
else
  body='This is new page.
Please write body and push the save button.'
fi

title=`echo "$page" | sed 's/_/ /g'`

cat<<EOF
Content-Type: text/html

<TITLE>$title - Wiki</TITLE>
<H1>$title</H1>
<HR>
<H2>CONTENT:</H2>
<PRE>
$body
</PRE>
<HR>
<H2>EDITOR:</H2>
<FORM action=wiki.sh?$page method=post>
<TEXTAREA cols=60 rows=7 name=text>$body</TEXTAREA>
<INPUT type=submit value=SAVE></FORM>
EOF

cat<<EOF
<HR>
<H2>PAGE LIST:</H2>
EOF

for item in `ls $dir`;
do
  echo "<dt><a href=wiki.sh?$item>" $item "</a>"
done

echo "<HR>"
echo "my wiki system by dyama &lt;dyama@member.fsf.org&gt;"

www.sed

URL文字列デコード用 sed ファイル。

#!/bin/sed

s/^text=//
s/+/ /g

s/%0D%0A/\n/g
s/%0A/\n/g
s/%0D/\n/g

s/%21/!/g
s/%3F/?/g
s/%2B/+/g
s/%3D/=/g
s/%7C/|/g
s/%23/#/g
s/%24/$/g
s/%5E/^/g
s/%26/\&/g
s/%28/(/g
s/%29/)/g
s/%5C/\\/g
s/%60/`/g
s/%7E/~/g
s/%5B/[/g
s/%5D/]/g
s/%7B/{/g
s/%7D/}/g
s/%3B/;/g
s/%27/'/g
s/%3A/:/g
s/%22/"/g
s/%3C/</g
s/%3E/>/g
s/%2C/,/g
s/%2F/\//g
s/%09/\t/g

s/%25/%/g

wiki.sh に +rx して、ページ保存用のディレクトリ「./p」を 777 で作成し、wiki.sh にアクセスすると次のように表示されます。

wiki

新規ページを作成するには、URL文字列に?pagenameをつけてアクセスします。wiki.sh の URL がhttp://localhost/wiki.shの場合、http://localhost/wiki.sh?pagenameになります。 ページの削除機能はないので、端末からログインして、ディレクトリ p 以下の対象ファイルを削除すればOKです。

また、SVN などに噛ませてページの更新時毎にディレクトリ p 以下をコミットしてやれば、ヒストリー機能も実現できそうです。楽チンですね。

コメントを残す

メールアドレスが公開されることはありません。