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