Script avec coloration syntaxique

#!/bin/bash

#Script réalisé par Arthur Lapraye pour le projet mot sur le web - 2013/2014
#Utilisation : Le script prend en entrée deux paramètres : 
#$1 Un dossier contenant des fichiers d'URL 
#$2 un nom pour le fichier HTML créé par le script.

#Le gros avatage d'un script non-interactif prenant des paramètres au lancement : 
#on peut le relancer simplement en faisant !! dans la ligne de commande
# C'est bien moins pénible à tester.

#grep -E -o "\w+" D.txt | sort | uniq -c | sort -r 
#cat poliitikko-* | grep -E -o "\w+" | sort | uniq -c | sort -rn | less
#Si les deux paramètres ne sont pas spécifiés, le script imprime une erreur sur stderr et s'arrête en renvoyant un code d'erreur :

if [ -z $1 ]
then
	echo "ERREUR : Aucun dossier d'URL spécifié. Usage : ./urlaspire.sh <dossier d'urls> <nom de fichier de sortie>" >&2
	exit 87

elif [ -z $2 ] 
then
	echo "ERREUR : Vous devez spécifier un nom de fichier HTML. Usage : ./urlaspire.sh <dossier d'urls> <nom de fichier de sortie>" >&2
	exit 88
			
# Si les deux paramètres du script sont spécifiés, le script peut commencer l'écriture de la page HTML
else
	#Création de l'en-tête du fichier HTML, avec le doctype et le charset idoine.
	echo -e "<!DOCTYPE html>\n<html>\n<head>\n<title>L'ami des veaux</title>\n <meta charset=\"UTF-8\">
		 <link rel=\"StyleSheet\" href=\"style.css\" type=\"text/css\" media=\"screen\" />
		 <meta name=\"keywords\" content=\"TAL, politicien, politiker, politician,\" />
		<meta name=\"description\" content=\"Le projet mot sur les internets\" />
		<meta name=\"author\" content=\"Thibault Bejerano et Arthur Lapraye\" />
		<link href=\"favicon.gif\" rel=\"shortcut icon\" type=\"image/x-icon\" />
		</head>" > $2 
		
	echo -e "<body><header><h1>Pages aspirées</h1>\nTriées par fichier d&rsquo;URL sources.\n</header>\n<nav style=\"margin-left: 1%;\">\n" >> $2
		 	 
	for fichier in $(ls -B $1)
	do
		echo "Création du menu : $fichier"
		echo -e "<p><a href=\"#$fichier\">URLs du fichier $fichier</a></p>\n" >> $2
	done
	
	echo '</nav><section class="main" style="width: 90%;">' >> $2
	
	# Initialisation du compteur d'URLs.
	compte=0

	# Pour chaque fichier contenu dans le répertoire $1 (en l'occurence ce sera URLS), un tableau différent sera créé.
	# En revanche, le compteur n'est pas remis à 0
	# L'option -B ordonne explicitement à ls de ne pas lister les fichiers de sauvegarde se terminant par un ~
		
	for fichier in $(ls -B $1)
    	do
		echo "fichier : $fichier" # Message permettant de se repérer dans l'exécution du script. 

	    	# Chaque tableau d'URL a pour titre le fichier d'où proviennent les URLs en question		    		
	    	echo "<table id=\"$fichier\"><caption>$fichier</caption>" >> $2 
	    	
	    	#En-têtes des différentes colonnes.
	    	echo -e "\t\t\t<tr><th class=\"numero\">N°</th><th>Lien </th><th class=\"statut\">Retour wget</th><th class=\"encodage\">Encodage</th> 
	  			<th class=\"copies\">Copies</th><th class=\"dump\">Texte brut</th><th class=\"contexte\">Contextes</th>
	  			<th class=\"index\">Index</th></tr>" >> $2
	    			
	    	#Boucle lisant un fichier ligne par ligne. 
	    	#Et assignant le résultat à la variable $url
		while read url
		do
			if [ ! -z $url ]
			then
						
				#Incrémentation du compteur d'URLs.
				compte=$(($compte+1))
					
				#Suppression de certains caractères grâce aux options de pattern-matching de Bash
				wrapper="${url#http://*/}"
				wrapper="${wrapper%%#*}"
					
				#Remplacement de caractères problématiques dans les URLs 
				#pour pouvoir les transformer en noms de fichier.	
				wrappee="$( echo $wrapper | sed -r "s/(\/|&|\?|\\|\.)/\-/g" | sed -r "s/\.php-/php/g" | sed -r "s/%/hex/g" )"
				copiz="PAGES-ASPIREES/$compte-${wrappee%%.html}.html" 
					
				#Aspiration de la page web brute par wget & récupération du code de sortie.
				wget -nv $url -O $copiz
				statut=$? 
					
				echo -e "\t\t\t<tr><td class=\"numero\">$compte</td> <td><a href=\"$url\">$wrapper</a></td>
						<td class=\"statut\">$statut</td>" >> $2
					
				if [ $statut -eq 0 ]
				then
						
					#Nom et chemin vers les pages aspirées
					dump="DUMP-TEXT/$compte-$fichier-${wrappee%.*}" 
					contexte="CONTEXTES/$fichier-$compte-$wrappee-contexts"
					index="index/$fichier-$compte-$wrappee-index"
							
					#Le script va nettoyer la page web en employant le navigateur textuel w3m si celui-ci est disponible
					#Sinon, si lynx est disponible, le script emploie Lynx
					#Si ni Lynx, ni w3m ne sont trouvés, le script s'arrête et renvoie une erreur. 
					
					if [ $(which w3m) ]
					then
							w3m -O UTF-8 -dump $url > $dump
					elif [ $(which lynx) ]
					then
						echo "w3m non trouvé. Essai avec lynx"
						lynx -dump -nolist -display-charset=utf-8 $url > $dump
					else
						echo "ERREUR : veuillez installer Lynx ou W3m"
						exit 89
					fi
						
					#Pour accommoder la morphologie particulière du finnois
					if [ $fichier == "poliitikko" ]
					then
						grep -Ei  $dump  -e "poliitikk?o" > $contexte
					else
						grep -Ei  $dump  -e "$fichier" > $contexte
					fi
						
					#Création de l'index du fichier
					cat $dump | grep -Ei -o "[[:alpha:]]+" | sort -f | uniq -ic | sort -rn  > $index
						
					echo -e "<td class=\"encodage\">$(file -b --mime-encoding $copiz)</td>
							<td class=\"copie\"><a href=\"$copiz\">Copie locale</a></td>
							<td class=\"dump\"><a href=\"$dump\">dump</a></td>
							<td class=\"contexte\"><a href=\"$contexte\">contexte</a></td> 
							<td class=\"index\"><a href=\"$index\">Index</a></td>
							</tr>" >> $2
							
				else 
					echo "<td colspan=\"5\" class=\"echec\">Page non téléchargée.</td>" >> $2
				fi
					
			fi
				
		done < "$1/$fichier" # C'est ici qu'on indique à partir de quel fichier la boucle extrait les URLs.
		
		
		echo -e "<tr><td class=\"empty\" colspan=\"5\"></td>" >> $2
	
		z="DUMP-TEXT/$fichier-global"
		echo "" > $z
		
		for file in $(ls "DUMP-TEXT" | grep -Ei -e "$fichier" | grep -vE -e "$fichier-global" ) 
		do
			echo "Dumping $file in $z"
			cat "DUMP-TEXT/$file" >> $z
			echo -e "\n<§>\n" >> $z
		done
		
		echo -e "<td class=\"dump\"><a href=\"$z\">Dump global</a></td>" >> $2
		
		cat $z | grep -Ei -o "[[:alpha:]]+" | sort -f | uniq -ic | sort -rn > "index/$fichier-index-global"
		
		z="CONTEXTES/$fichier-contexts-global"
		
		echo "" > $z
		
		for file in $(ls "CONTEXTES" | grep -Ei -e "$fichier" | grep -vE -e "$fichier-contexts-global" ) 
		do
			echo "Dumping $file in $z"
			cat "CONTEXTES/$file" >> $z
			echo -e "\n\n" >> $z
		done
		
		echo -e "<td class=\"contexte\"><a href=\"$z\">Contextes globaux</a> </td> 
			<td class=\"index\"><a href=\"index/$fichier-index-global\">Index global</a></td>
			</tr>"  >> $2
				
		echo -e "</table>" >> $2
		echo -e "<div class=\"command\"> <a href=\"#\">Retourner en haut.</a> </div>" >> $2
		
	    done
		
	echo -e '\n <footer><a href="#">Retourner en haut</a>&nbsp;|' >> $2
	echo -e '&nbsp;<a href="analyse.html">Analyse des résultats</a>|&nbsp;<a href="script.html">Explications</a>|&nbsp;<a href="index.html">Accueil</a>' >> $2
	echo -e '\n</body>\n</html>' >> $2
		
fi

echo "Ouf !"
	
exit 0		

#Fin du script.