Page tree

Versions Compared

Key

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

...

Webseitengestaltung

...

mit

...

CGI-Programmierung

...


1 Allgemeines

Bei der professionellen Gestaltung von Webseiten stößt man relativ schnell an die Grenzen der Möglichkeiten die reine HTML-Dokumente bieten. Einige Aufgaben machen es unerläßlich, daß der Webbesucher Programme auf dem Server ausführen darf. Dies stellt aber hohe Anforderung an die Sicherheit, weil es ausgeschlossen sein muß, auch andere Programme auszuführen, was schwerwiegende Probleme nach sich ziehen kann. Mit dem Common-Gateway-Interface (CGI) steht diese Möglichkeit zur Verfügung. Es ist integraler Bestandteil des Servers, welcher das ?http" - Protokoll bereitstellt. 

2 Systemübersicht

Image Added

Bild 1: Grundsätzlicher Aufbau des http-Servers mit CGI 
Wird vom Client ein Dokument angefordert, trifft das CGI die Feststellung, ob der Dokumentpfad in das CGI-Programmverzeichnis oder in ein sonstiges Verzeichnis weist. Wird ein Programm im CGI-Programmverzeichnis angesprochen, wird dies vom CGI ausgeführt. Als Ergebnis liefert dieses Programm dann ein HTML-Dokument an das CGI. Dies geschieht über den Kanal ?Standardausgabe". Würde dieses Programm von der Shelloberfläche ?normal" ausgeführt erscheint dieses HTML-Dokument auf dem Bildschirm welcher üblicherweise das Standardausgabegerät darstellt. 

Beispiel:

Code Block

#!/bin/sh#disable filename globbing
set -f#Ich bin ein Dokument vom Typ text/html
echo Content-type: text/html
echo ""
##Die 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 Der Pfadname zur Counterdatei, die den letzten Wert enthält
#enthält#Pfad Pfad vorhanden, Zugriffsrechte ??
COUNT_FILE=/tmp/cgi-count
 if [ ! -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
#Zähler#Der Der Wert wird jeweils durch die 5 Werte dividiert, das Ergebnis ergibt die
#ergibt einzelnedie#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
# Derdone#Der Wert bildet die Grundlage für den Dateinamen der Grafik, welche
# diewelche#die einzelnen Ziffern enthält also 0.gif enthält die ?0"
##der 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>'
*{+}

Allgemeine

...

Hinweise:

...

Während

...

das

...

CGI-Script

...

läuft

...

stehen

...

gewisse

...

Umgebungsvariablen

...

zur

...

Verfügung,

...

wie

...

z.B.

...

der

...

Pfad,

...

das

...

aktuelle

...

Verzeichnis

...

usw.

...

Welche

...

Umgebungsvariablen

...

zur

...

Verfügung

...

stehen,

...

zeigt

...

das

...

bei

...

Apache

...

mitgelieferte

...

Script

...

?test-cgi"

...

das

...

folgenden

...

Inhalt

...

hat: 

...

 

...

Code Block

#\!/bin/sh
 \# disable filename globbing
set \-f
 echo Content-type: text/plain
echo
 echo CGI/1.0 test script report:
echo
 echo argc is $#. argv is "$*".
echo
 echo 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

...


 

...


Die

...

Variable

...

$QUERY_STRING

...

dient

...

der

...

Kommunikation

...

zwischen

...

dem

...

aufrufenden

...

HTML-Dokument

...

und

...

dem

...

CGI-Script,

...

wenn

...

z.B.

...

vom

...

Benutzer

...

eingegebene

...

Daten

...

weitergeleitet

...

werden

...

müssen.

...

Hierbei

...

wird

...

im

...

HTML-Dokument

...

eine

...

FORM

...

deklariert,

...

und

...

als

...

Kommunikationsform

...

mit

...

dem

...

?ACTION"-Script

...

die

...

Methode

...

?GET"

...

gewählt. 

...

Das

...

verwendete

...

Beispiel

...

eines

...

Gästebuchs

...

zeigt

...

diese

...

Datenübergabe

...

über

...

die

...

Methode

...

?GET".

...

Hierbei

...

werden

...

über

...

die

...

Umgebungsvariable

...

QUERY_STRING

...

Daten

...

vom

...

CGI-Script

...

ausgewertet.

...

Die

...

ebenso

...

mögliche

...

Methode

...

POST

...

übergibt

...

die

...

Daten

...

an

...

das

...

CGI-Script

...

über

...

den

...

Standardeingabekanal. 

...


Das

...

Beispiel

...

besteht

...

aus

...

mehreren

...

HTML

...

-

...

und

...

CGI-Scripten: 

...

Dateiname

Verwendung

/gaestebuch/gb-neu.htm

...

Maske

...

zur

...

Erfassung

...

eines

...

neuen

...

Gästbucheintrags

...

/cgi-bin/gb-neu.sh

...

Ausführungsscript

...

für

...

einen

...

neuen

...

Gästebucheintrag

...

/cgi-bin/gb-query.sh

...

Anzeige

...

der

...

Einträge

...

des

...

Gästebuchs

  <HTML><TITLE>Eintrag in das Gästebuch </TITLE>

Code Block
 <BODY BGCOLOR="#BBDDFF">\\
 Wenn Sie einen neuen Eintrag vornehmen m&ouml;chtenmöchten,<BR>\\
 geben Sie bitte Ihre pers&ouml;nlichenpersö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&ouml;schenlö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&uuml;lltausgefüllt wurden.<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'Gehen Sie &uuml;berüber Ihren Browser mit dem<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'Schalter "Back" oder "Zur&uuml;ckZurück" zur vorherigen<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'Eingabemaske zur&uuml;ck<BR>zurück<BR>'
else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \[ \-d $GB_DIR \]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \# 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; \# 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&auml;stebuchGä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&uuml;rfü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&uuml;ck >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; 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
 echo&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&auml;stebuch<H1>Gästebuch von www.keipke.de</H1><BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'Es werden die (max.) letzten 20 Eintr&auml;geEinträge aus<BR>'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 'dem G&auml;stebuchGä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&auml;geEinträ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 "<TR><TD>"$1"</TD><TD>"$2"</TD><TD>"$3"</TD><TD>"$4"</TD><TD>"$5"</TD></TR>" }

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

Bild

...

12:

...

Die

...

Datei

...

gb-query.sh

...