#!/bin/bash #L'utilisateur doit se placer dans le dossier "projet" et lancer la commande suivante: sh PROGRAMMES/script.sh. Le programme fera tout lui-même, sans demander aucune information supplémentaire. Le programme créera un fichier tabl1.html dans le dossier "TABLEAUX". echo "Tableau de liens http" > TABLEAUX/tabl1.html; # obj est un fichier ou dossier dans le répertoire "projet". for obj in `ls` do #J'ai besoin du dossier "URLS", qui se trouve dans le répertoire "projet", donc je fais un test pour le retrouver. if [ $obj = "URLS" ]; then #Dans le dossier "URLS", il y a des dossiers consacrés aux différentes langues. Je les traite un à  un. "dossier" est une variable qui prend pour valeur les noms des dossiers du répertoire "URLS" l'un après l'autre. # La variable "nom" prend pour valeur le nom de chacun des dossiers du répertoire "URLS" l'un après l'autre. for dossier in `ls URLS` do if [ $dossier = "arabe" ]; then nom="arabe"; elif [ $dossier = "russe" ]; then nom="russe"; fi echo "$nom"; # L'en-tête de la partie du tableau contient le nom du dossier traité qui correspond au nom d'une langue. echo "" > TABLEAUX/tabl1.html; n=1; for fichier in `ls URLS/$dossier` do #Dans chaque dossier consacré à une langue donnée, il y a 4 fichiers contenant des URLS. #Chaque fichier contient des URLS qui comprend un des 4 sens du mot "bouton". Les noms de ces fichiers sont significatifs. #Par exemple, le fichier qui contient des URLS concernant le mot "bouton" au sens botanique s'appelle b_ar_txt.txt. #Le fichier qui contient des URLS relatif au mot "bouton" au sens électrique s'appelle e_ar_txt.txt. #Grâce à la commande "cut", nous obtenons cette première lettre significative du nom du fichier et ainsi déterminons le sans du mot dans les URLS qu'il contient. #La variable "theme" prend pour valeur cette première lettre et la variable "sens" prend pour valeur le sens du mot. #L'introduction de la deuxième variable n'est pas nécessaire, mais commode pour le contrôle du déroulement du programme. echo "fichier = $fichier"; theme=`echo $fichier | cut -d_ -f1`; echo "theme = $theme"; if [ $theme = "b" ]; then sens="botanique"; elif [ $theme = "c" ]; then sens="couture"; elif [ $theme = "m" ]; then sens="medical"; elif [ $theme = "e" ]; then sens="electrique"; fi echo "sens = $sens"; #Je crée des répertoires pour stocker les fichiers contenant le texte en UTF-8 et les fichiers contenant les contextes des mots choisis. mkdir DUMP-UTF8/$sens-$nom; mkdir CONTEXTES/$sens-$nom; #On aspire les pages à partir des URLS grâce à la commande "curl". for lien in `cat URLS/$dossier/$fichier` do curl -o PAGES-ASPIREES/pa$n$nom-$theme.html $lien; #On récupère l'encodage à partir des indications du créateur du site. La commande "egrep" cherche un des motifs indiqués entre parenthèses. L'option -i enlève les distinctions entre les casses. L'option -o arrête la recherche au sein du fichier dès que le premier motif (la première indication de l'encodage) est trouvé. #La variable "char" prend pour valeur l'encodage de la page. char=$(egrep -m 1 -o '(((utf|UTF)-(8|16|32))|(gb|GB)(k|K|2312|18030)|(iso|ISO|Iso)-8859-(\w)(\w)?|(WINDOWS|windows|Windows)-1251|(WINDOWS|windows|Windows)-1252|(WINDOWS|windows|Windows)-1256|((m|M)(a|A)(c|C)(R|r)(O|o)(M|m)(a|A)(n|N))|us-ascii)' PAGES-ASPIREES/pa$n$nom-$theme.html | sort -u) echo "char=$char" #Si l'encodage n'est pas indiqué dans la page ou bien, pour une raison ou une autre, il n'est pas détecté par "egrep", on cherche l'encodage à l'aide de la commande "file". #La variable "enc" prend pour valeur la réponse donnée par la commande "file". if [[ $char == "" ]]; then enc=$(file -i PAGES-ASPIREES/pa$n$nom-$theme.html) echo "enc=$enc" #On vérifie si la commande "file" a retrouvé l'encodage, c'est-à-dire si la variable "enc" contient le mot "charset". verif=$(egrep -i -o "charset" $enc) echo "verif=$verif" #Si l'encodage a été détecté, on le donne comme valeur à la variable "encodage". Pour le faire, on prend la variable "enc", qui contient une ligne qui ressemble à "charset=UTF-8". On coupe la valeur à droite du signe "=".Ainsi, on obtient l'encodage. if [[ $verif == "charset" ]]; then encodage=$($enc | cut -d= -f2) #Si l'encodage n'a pas été détecté par "file", on donne à la variable "encodage" la valeur d'une chaîne de caractères vide. else encodage="" fi #Si l'encodage a été détecté par la commande "egrep", la variable "encodage" prend cette valeur. else encodage=$char fi echo "encodage=$encodage" #Ainsi, la variable "encodage" contient soit l'encodage de la page, soit une chaîne de caractères vide. #Si l'encodage n'a pas été détecté, on affiche un message d'erreur dans le tableau. if [[ $encodage == "" ]]; then echo "" > TABLEAUX/tabl1.html; #Si l'encodage a été détecté, on le donne pour valeur à la variable "code" et on continue les traitements. else code=$encodage echo "code=$code" # fichier boncode$n$nom.txt - fichier avec le bon encodage (UTF-8) # fichier proper$n$nom.txt - fichier avec l'encodage initial #Si l'encodage initial est UTF-8, il ne faut pas le changer. On écrit le même texte dans deux fichiers: avec l'encodage initial et avec l'encodage UTF-8. if [ $code = "UTF-8|utf-8|utf8|UTF8" ]; then lynx -dump -nolist -display_charset=$code $lien > DUMP-TEXT/proper$n$nom-$theme.txt; lynx -dump -nolist -display_charset=$code $lien > DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt; #On cherche les motifs dans les fichiers texte en UTF-8 et on les enregistre dans des fichiers contextes dont les noms commencent avec "cont". if [ $nom = "arabe" ]; then if [ $sens = "botanique" ]; then egrep -i "برعم" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "couture" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "medical" ]; then egrep -i "بشرة" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "electrique" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt fi elif [ $nom = "russe" ]; then if [ $sens = "botanique" ]; then egrep -i "бутон" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "couture" ]; then egrep -i "пуговиц" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "medical" ]; then egrep -i "прыщ" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "electrique" ]; then egrep -i "кноп" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt fi fi #Si l'encodage initial n'est pas UTF-8, on recode le fichier à l'aide de la commande "iconv". else lynx -dump -nolist -display_charset=$code $lien > DUMP-TEXT/proper$n$nom-$theme.txt; iconv -f $code -t UTF-8 DUMP-TEXT/proper$n$nom-$theme.txt > DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt; #On cherche les motifs dans les fichiers texte en UTF-8 et on les enregistre dans des fichiers contextes dont les noms commencent avec "cont". if [ $nom = "arabe" ]; then if [ $sens = "botanique" ]; then egrep -i "برعم" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "couture" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "medical" ]; then egrep -i "بشرة" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "electrique" ]; then egrep -i "زر" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt fi elif [ $nom = "russe" ]; then if [ $sens = "botanique" ]; then egrep -i "бутон" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "couture" ]; then egrep -i "пуговиц" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "medical" ]; then egrep -i "прыщ" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt elif [ $sens = "electrique" ]; then egrep -i "кноп" DUMP-UTF8/$sens-$nom/boncode$n$nom-$theme.txt > CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt fi fi #La variable "contenu" prend pour valeur le contenu des fichiers contextes un à un. contenu=$(cat CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt) echo "contenu=$contenu" #Si "egrep" n'a pas trouvé les contextes, le contenu de la variable "contenu" est vide. Dans ce cas là, on affiche un message d'erreur. if [[ $contenu == "" ]]; then echo "" > TABLEAUX/tabl1.html; #Si "egrep" a trouvé les contextes, la variable "contenu" n'est pas vide, on affiche un lien envers le fichier de contextes dans le tableau html. else echo "" > TABLEAUX/tabl1.html; fi #fi de if code = utf-8 fi #fi de if encodage="" fi echo "`cat CONTEXTES/$sens-$nom/cont$n$nom-$theme.txt`" > CONTEXTES/$sens-$nom/globcont$nom-$theme.txt #n=`expr $n + 1`; let "n+=1"; # done de for lien dans fichier done echo "" > TABLEAUX/tabl1.html; #done de for fichier dans dossier done #done de for dossier dans URLS done #fi de if obj = URLS fi #done de obj in ls done echo "" > TABLEAUX/tabl1.html; exit;
sensadresse weblien vers la page aspireedump encodage initialdump encodage UTF-8contextes
$nom
$sens$nlien vers le site webpage aspiree numero $nerreurerreurerreur
$sens$nlien vers le site webpage aspiree numero $ndump$n$nom.txtboncode$n$nom-$theme.txtcontextes non trouvés
$sens$nlien vers le site webpage aspiree numero $ndump$n$nom.txtboncode$n$nom-$theme.txtcontextes
$senscontextes globaux