A.2 Programmation en Bourne Shell
A.2.1 Serveur Web en Bourne Shell
#!/bin/sh
#
# Exemple de serveur HTTP en shell
#
#
# Quelques constantes
#
NC=/usr/bin/nc
PORT=8080
TTY_PREFIXE=/dev/tty
PTY_PREFIXE=/dev/pty
TTY_NUMERO=q3
REPERTOIRE=${HOME}/Scripts/Web
#
# Boucle principale
# (ecoute sur le port, traitement de la requete, envoi du fichier)
#
while true ; do
#
# On ecoute sur le cote maitre du terminal virtuel
#
${NC} -l -p ${PORT} 4<>${PTY_PREFIXE}${TTY_NUMERO} >&4 2>&4 <&4 &
PID=$!
#
# On lance un sous-shell sur le cote esclave
#
(
stty -echo igncr
#
# Lecture de la requete HTTP
#
read requete
#
# Lecture des entetes (mises a la poubelle)
#
while read line ; do
if [ -z "${line}" ] ; then break ; fi
done
#
# Analyse de la requete
#
set -- ${requete}
commande=$1 ; file=$2 ; protocole=$3
#
# Reponse a la requete
#
if [ "${commande}" != "GET" -o ! -f "${REPERTOIRE}/${file}" ] ; then
echo "${protocole} 400 erreur"
echo
echo "Erreur !!"
else
echo "${protocole} 200 OK"
echo "Content-type: text/html"
echo
cat "${REPERTOIRE}/${file}"
fi
) 4<>${TTY_PREFIXE}${TTY_NUMERO} >&4 2>&4 <&4
#
# On stoppe l'ecoute
#
kill ${PID}
sleep 2
done
A.2.2 Exemple de page Web
<html>
<head>
<title>Serveur web de demonstration</title>
</head>
Voici deux p't liens :
<dl>
<dt>
<a href="/fichier1">Premier fichier</a>
<dt>
<a href="/fichier2">Second fichier</a>
</dl>
<p align=right>
Serveur Script
</p>
</body>
</html>