Я и сам поначалу CGI делал только на баше (но в малой локалке это еще более-менее работало, а потом пришлось все-таки и о безопасности задуматься — CGI стал писать на C).
Вот — простой пример (словарик).
dict.cgi:
#!/bin/sh
addw()
{
echo "<form action="/cgi-bin/addaword" method=POST>\
The translation of <b><input size=20 name="word" value="\"$word\""></b> is <input name="trans" size=50>"
echo "<input type=submit value=\"Add the word\"></form>"
}
ud="../html/Dictionary/userdict.txt"
eval `./convert`
echo -e "Content-type: text/html\n"
cat header.txt
echo "<body>"
if [ "$word" = "" ]; then
tr="Please, enter a word"
else
tr=`cat $ud|grep -i " $word "`
tr1=`cat ../html/Dictionary/Dictionary.txt|grep -i "^$word:"`
tr2=`cat ../html/Dictionary/Dictionary.txt|grep -i "$word"`
tr3=`cat ../html/Dictionary/kara4.dic| grep -i "$word"`
fi
if [ "$pass" = "eddy" ]; then
tmp="/tmp/dic.cgi.$$"
cat $ud | grep -v " $word " > $tmp
rm $ud
cp $tmp $ud
rm $tmp
addw
exit
fi
if [ "$tr" != "" -o "$tr1" != "" -o "$tr2" != "" -o "$tr3" != "" ]; then
if [ "$tr1" = "" ]; then
if [ "$tr2" = "" ]; then
tr1="The word is absent"
else
tr1="$tr2"
fi
fi
if [ "$tr" = "" ]; then tr="The word is absent"; fi
echo "<div style=\"text-align: center; height: 100%\"><pre>"
echo "<big><b>Карачаевский:</b></big><hr width=30%>"
echo "$tr3" | sed "s/$word/<b><font color=red>$word<\/font><\/b>/g"
echo "<hr size=5px>
<big><b>Английский:</b></big><hr width=30%>"
echo "$tr1" | sed "s/$word/<b><font color=red>$word<\/font><\/b>/g"
echo "</pre></div>"
else
echo "Такого слова я, увы, не знаю..."
fi
echo "</body>"
И вот такой формочкой этот CGI запускался:
<form name="main" action="/cgi-bin/dict.cgi" method="POST" target="client">
<b>Ваше слово:</b>
<input name="word" size="50">
<input type=submit size="2" value="Перевести">
</form>