Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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
&nbsp;# 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
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'konnte nicht gespeichert werden, weil<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'die Felder Name, EMail oder Kommentar<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'nicht ausgefüllt wurden.<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'Gehen Sie über Ihren Browser mit dem<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'Schalter "Back" oder "Zurück" zur vorherigen<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'Eingabemaske zurück<BR>'
else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[ \   if [ -d $GB_DIR \]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     then
     # Wenn das Verzeichnis existiert
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;          if \[ \-w $GB_DIR \]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Wenn das Verzeichnis beschreibbar ist
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[ \! \-f $GB_FILE \]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;          then
               # Wenn das Verzeichnis beschreibbar ist
               if \[ \! \-f $GB_FILE \]
               then
                    # Wenn die Datei noch nicht existiert, dann anlegen
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; touch $GB_FILE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[ \-w $GB_FILE \]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Wenn die Datei beschreibbar ist
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo $DATE_TIME'\|'$NAME'\|'$VORNAME'\|'$EMAIL'\|'$KOMMENTAR >>$GB_FILE
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'wurde erfolgreich in das Gästebuch eingetragen'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'Vielen Dank für Ihren Besuch<BR><BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo '<a href="../main.htm" >Zurück zur Leitseite</a>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'konnte nicht gespeichert werden.<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'Die Datendatei ist nicht beschreibbar.'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'konnte nicht gespeichert werden.<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'Das Verzeichnis ist nicht beschreibbar.'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                    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>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;          echo 'Das Verzeichnis existiert nicht.'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     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
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     exit
fi
for i in $\*
do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     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
&nbsp;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
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     # Wenn die datei existiert und nicht leer ist
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo '<H1>Gästebuch von www.keipke.de</H1><BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
     echo 'Es werden die (max.) letzten 20 Einträge aus<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'dem Gästebuch angezeigt.<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'Insgesamt sind zur Zeit'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     # Ermittlung Anzahl Zeilen
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     cat $GB_FILE\|wc \-l
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'Einträge vorhanden<BR><BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo '<TABLE BORDER="1">'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
     # Die letzten 20 Zeilen oder weniger holen. Die Formatierung als Tabelle
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     # übernimmt der awk. Hierbei werden die pipezeichen durch TR/TD-tags ersetzt.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     tail \-20 $GB_FILE\|awk \-F'\|' ' $1 \!= ""
 { print ""$1""$2""$3""$4""$5"" }

'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
     echo '</TABLE>'
else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'Das Gästebuch enthält zur Zeit'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'noch keine Einträge. Versuchen Sie'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     echo 'es zu einem späteren Zeitpunkt noch einmal.'
fi
echo '</BODY></HTML>'

...