...
Code Block |
---|
#!/bin/sh#disable filename globbing set -f#Ichf #Ich bin ein Dokument vom Typ text/html echo Content-type: text/html echo ""#Die HTML-Tags werden mit dem Befehl echo ausgegeben. echo '<HTML>' echo '<HEAD>' echo '<TITLE> Ein Counter </TITLE>' echo '</HEAD>' echo '<BODY BGCOLOR="BBDDFF" TOPMARGIN=5 LEFTMARGIN=5 LINK=YELLOW VLINK=WHITE><CENTER>' echo '<H5>' echo 'Besucher seit dem 01.06.1999:' echo '</H5>' echo '<TABLE BORDER=0 CELLSPACING="0" CELLPADDING="0"><TR><TD>'#Der Pfadname zur Counterdatei, die den letzten Wert enthält#Pfad vorhanden, Zugriffsrechte ?? COUNT_FILE=/tmp/cgi-count ifif [ ! -f $COUNT_FILE ] then # Wenn die Datei nicht existiert, dann mit dem Wert 0 anlegen. LAST_COUNT=0 echo $LAST_COUNT >$COUNT_FILE else # sonst Inhalt lesen und erhöhen, dann Speichern LAST_COUNT=`cat $COUNT_FILE` expr $LAST_COUNT + 1 >$COUNT_FILE fi fi#Es#Es ist ein 5-stelliger Zähler#Der Wert wird jeweils durch die 5 Werte dividiert, das Ergebnis ergibt die#einzelne Ziffer für jede Stelle for i in 10000 1000 100 10 1 do FILENAME=`expr $LAST_COUNT / $i` while [ $FILENAME -gt 9 ] do # solange der Wert größer 9 ist, weiter durch 10 teilen FILENAME=`expr $FILENAME % 10` done#Der Wert bildet die Grundlage für den Dateinamen der Grafik, welche#die einzelnen Ziffern enthält also 0.gif enthält die ?0"#der Tag für die Anzeige der Grafik echo '<img src=/graphics/'$FILENAME'.gif border="0">' done echo '</TD></TR></TABLE>' echo '</CENTER>' echo '</BODY></HTML>' |
...
Code Block |
---|
#!/bin/sh # disable filename globbing set -f echoecho Content-type: text/plain echo echoecho CGI/1.0 test script report: echo echoecho argc is $#. argv is "$*". echo echoecho "SERVER_SOFTWARE = $SERVER_SOFTWARE" echo "SERVER_NAME = $SERVER_NAME" echo "GATEWAY_INTERFACE = $GATEWAY_INTERFACE" echo "SERVER_PROTOCOL = $SERVER_PROTOCOL" echo "SERVER_PORT = $SERVER_PORT" echo "REQUEST_METHOD = $REQUEST_METHOD" echo "HTTP_ACCEPT = "$HTTP_ACCEPT" echo "PATH_INFO = "$PATH_INFO" echo "PATH_TRANSLATED = "$PATH_TRANSLATED" echo "SCRIPT_NAME = "$SCRIPT_NAME" echo "QUERY_STRING = "$QUERY_STRING" echo "REMOTE_HOST = $REMOTE_HOST" echo "REMOTE_ADDR = $REMOTE_ADDR" echo "REMOTE_USER = $REMOTE_USER" echo "AUTH_TYPE = $AUTH_TYPE" echo "CONTENT_TYPE = $CONTENT_TYPE" echo "CONTENT_LENGTH = $CONTENT_LENGTH" |
Bild 8: Die Datei test-cgi mit den verwertbaren Umgebungsvariablen
...
Code Block |
---|
<HTML><TITLE>Eintrag in das Gästebuch </TITLE> <BODY BGCOLOR="#BBDDFF">\\ Wenn Sie einen neuen Eintrag vornehmen möchten,<BR>\\ geben Sie bitte Ihre persönlichen Daten<BR>\\ und einen Kommentar an:<BR>\\ <FORM ACTION="/cgi-keipke/gb-neu.sh" METHOD="GET">\\ <TABLE BORDER="1"><TR><TD>\\ Name:\\ </TD><TD>\\ <INPUT TYPE="text" SIZE="20" MAXLENGTH="20" NAME="BESUCHER">\\ </TD></TR><TR><TD>\\ Vorname:\\ </TD><TD>\\ <INPUT TYPE="text" SIZE="20" MAXLENGTH="20" NAME="VORNAME">\\ </TD></TR><TR><TD>\\ EMail:\\ </TD><TD>\\ <INPUT TYPE="text" SIZE="60" MAXLENGTH="60" NAME="EMAIL">\\ </TD></TR><TR><TD>\\ Kommentar:\\ </TD><TD>\\ <INPUT TYPE="text" SIZE="60" MAXLENGTH="60" NAME="KOMMENTAR">\\ </TD></TR>\\ </TABLE>\\ <INPUT TYPE="submit" VALUE="Eingabe OK">\\ <INPUT TYPE="reset" VALUE="Eingabe löschen">\\ </FORM>\\ </BODY>\\ </HTML> |
Bild 9: Die Datei /gaestebuch/gb-neu.htm
Code Block |
---|
#\!/bin/sh # disable filename globbing set \-f echo Content-type: text/html echo "" echo '<HTML><HEAD>' echo '<BODY BGCOLOR="#BBDDFF">' \# Der Pfad für die Datei, welche die Gästebuchdaten enthält GB_DIR=/www/htdocs/keipke/gaestebuch.data \# Der Dateiname GB_FILE=$GB_DIR/gaestebuch.data # Herausfiltern der eingegebenen Daten aus dem String ?$QUERY_STRING" NAME=`echo $QUERY_STRING\|cut \-d'&' \-f1\|cut \-c 10-` VORNAME=`echo $QUERY_STRING\|cut \-d'&' \-f2\|cut \-c 9-` EMAIL=`echo $QUERY_STRING\|cut \-d'&' \-f3\|cut \-c 7-` KOMMENTAR=`echo $QUERY_STRING\|cut \-d'&' \-f4\|cut \-c 11-` DATE_TIME=`date \+'%d.%m.%y %T'` NAME=`/www/htdocs/keipke/cgi-bin/charchg.sh $NAME` VORNAME=`/www/htdocs/keipke/cgi-bin/charchg.sh $VORNAME` EMAIL=`/www/htdocs/keipke/cgi-bin/charchg.sh $EMAIL` KOMMENTAR=`/www/htdocs/keipke/cgi-bin/charchg.sh $KOMMENTAR` # Ausgabe der Daten zur Bestätigung oder Fehler echo 'Ihre Eingabe:<BR><BR>' echo '<TABLE BORDER="1"><TR>' echo '<TD>' echo Zeit echo '</TD>' echo '<TD>' echo $DATE_TIME echo '</TD></TR><TR>' echo '<TD>' echo Name echo '</TD>' echo '<TD>' echo $NAME echo '<TD></TR><TR>' echo '</TD>' echo '<TD>' echo Vorname echo '</TD>' echo '<TD>' echo $VORNAME echo '</TD></TR><TR>' echo '<TD>' echo EMail echo '</TD>' echo '<TD>' echo $EMAIL echo '</TD></TR><TR>' echo '<TD>' echo Kommentar echo '</TD>' echo '<TD>' echo $KOMMENTAR echo '</TD>' echo '</TR></TABLE><BR>' if \[ \-z $NAME \] \|\| \[ \-z $EMAIL \] \|\| \[ \-z $KOMMENTAR \] then echo 'konnte nicht gespeichert werden, weil<BR>' echo 'die Felder Name, EMail oder Kommentar<BR>' echo 'nicht ausgefüllt wurden.<BR>' echo 'Gehen Sie über Ihren Browser mit dem<BR>' echo 'Schalter "Back" oder "Zurück" zur vorherigen<BR>' echo 'Eingabemaske zurück<BR>' else if \[ \ if [ -d $GB_DIR \] then then # Wenn das Verzeichnis existiert if \[ \-w $GB_DIR \] then # Wenn das Verzeichnis beschreibbar ist if \[ \! \-f $GB_FILE \] then then # Wenn das Verzeichnis beschreibbar ist if \[ \! \-f $GB_FILE \] then # Wenn die Datei noch nicht existiert, dann anlegen touch $GB_FILE else if \[ \-w $GB_FILE \] then # Wenn die Datei beschreibbar ist echo $DATE_TIME'\|'$NAME'\|'$VORNAME'\|'$EMAIL'\|'$KOMMENTAR >>$GB_FILE echo 'wurde erfolgreich in das Gästebuch eingetragen' echo 'Vielen Dank für Ihren Besuch<BR><BR>' echo '<a href="../main.htm" >Zurück zur Leitseite</a>' else echo 'konnte nicht gespeichert werden.<BR>' echo 'Die Datendatei ist nicht beschreibbar.' fi fi else echo 'konnte nicht gespeichert werden.<BR>' echo 'Das Verzeichnis ist nicht beschreibbar.' fi else touch $GB_FILE else if \[ \-w $GB_FILE \] then # Wenn die Datei beschreibbar ist echo $DATE_TIME'\|'$NAME'\|'$VORNAME'\|'$EMAIL'\|'$KOMMENTAR >>$GB_FILE echo 'wurde erfolgreich in das Gästebuch eingetragen' echo 'Vielen Dank für Ihren Besuch<BR><BR>' echo '<a href="../main.htm" >Zurück zur Leitseite</a>' else echo 'konnte nicht gespeichert werden.<BR>' echo 'Die Datendatei ist nicht beschreibbar.' fi fi else echo 'konnte nicht gespeichert werden.<BR>' echo 'Das Verzeichnis ist nicht beschreibbar.' fi else echo 'konnte nicht gespeichert werden.<BR>' echo 'Das Verzeichnis existiert nicht.' fi fi echo '</BODY></HTML>' |
Bild 10: Die Datei /cgi-bin/gb-neu.sh
Code Block |
---|
#\!/bin/sh # aus dem als Parameter übergebenen Wert werden bestimmte Sonderzeichen ausgetauscht. Weil z.B. vom Brwoser %40 für einen @ geliefert wird. if \[ $# \-eq 0 \] then exit fi for i in $\* do echo $i\|sed \-e 's/%40/@/g' \-e 's/%E4/ä/g' \-e 's/%F6/ö/g' \-e 's/%FC/ü/g' \-e 's/%C4/Ä/g' \-e 's/%D6/Ö/g' \-e 's/%DC/Ü/g' \-e 's/%DF/ß/g' \-e 's/%2C/,/g' \-e 's/+/ /g' \-e 's/%28/8/g' \-e 's/%29/)/g' \-e 's/%3C/</g' \-e 's/%3D/>/g' \-e 's/%22/\"/g' \-e 's/%21/\!/g' done |
Bild 11: Die Datei /cgi-bin/charchg.sh
Code Block |
---|
#!/bin/sh # disable filename globbing set \-f echo Content-type: text/html echo "" echo '<HTML><BODY BGCOLOR="#BBDDFF">' GB_DIR=/www/htdocs/keipke/gaestebuch.data GB_FILE=$GB_DIR/gaestebuch.data if \[ \-s $GB_FILE \] then # Wenn die datei existiert und nicht leer ist echo '<H1>Gästebuch von www.keipke.de</H1><BR>' ' echo 'Es werden die (max.) letzten 20 Einträge aus<BR>' echo 'dem Gästebuch angezeigt.<BR>' echo 'Insgesamt sind zur Zeit' # Ermittlung Anzahl Zeilen cat $GB_FILE\|wc \-l echo 'Einträge vorhanden<BR><BR>' echo '<TABLE BORDER="1">' # Die letzten 20 Zeilen oder weniger holen. Die Formatierung als Tabelle # übernimmt der awk. Hierbei werden die pipezeichen durch TR/TD-tags ersetzt. tail \-20 $GB_FILE\|awk \-F'\|' ' $1 \!= "" { print ""$1""$2""$3""$4""$5"" } ' ' echo '</TABLE>' else echo 'Das Gästebuch enthält zur Zeit' echo 'noch keine Einträge. Versuchen Sie' echo 'es zu einem späteren Zeitpunkt noch einmal.' fi echo '</BODY></HTML>' |
...