Le script bash

Généralités

Le script V1langue.sh est écrit en langage bash sur un simple fichier texte que l'on édite sous Microsoft Windows avec notepad++ et sous MacOS avec XCode qui facilite la visualisation des lignes bien formées au moyen de codes de couleurs. Le bash est un langage de programmation exécutable par un interpréteur de commandes unix qui s'appelle le shell et qui se trouve sous Microsoft Windows dans le programme cygwin qui est téléchargeable gratuitement, ou qui vient avec MacOS sous la forme d'une console appelé le terminal, ou qui vient avec Linux également sous la forme d'un terminal. Le langage bash est lui-même une sorte de shell à défaut, puisque son vrai nom d'après la commande man bash est: Bash - GNU Bourne – Again SHell.

Le script V1langue.sh est exécuté lorsque l'on tape sur la fenêtre de commandes sh V1langue.sh < donnees-lang.txt, comme s'il s'agissait d'une seule commande. Le script V1langue.sh est une donnée en entrée pour le bash composée de:

Explication conceptuelle de notre script bash

Notre programme commence par la déclaration du shell qu'on utilise, le terminal dispose des shells ash, bash, tcsh et zsh, c'est pour cette raison qu'il faut dire quel est le shell sur lequel le programme doit tourner ?
#!/bin/bash #
Ensuite le bash exécute ligne par ligne les commandes. La première commande est read qui sert à lire une variable. read assigne à la variable tablo la valeur ./TABLEAUX/bouchon-langue.html qui est une adresse qui pointe vers le fichier bouchon-langue.html qui n'existe pas encore.

Le fichier bouchon-langue.html ne sera crée que grâce à la commande echo "quelque chose" >> $tablo qui apparaît bien plus tard et qui contient le métacaractère >> qui redirige les flux en sortie et qui permet de créer des fichiers s'ils n'existent pas.

read tablo;
En ce qui concerne la commande read, plus précisément, soit le programme programme.sh et le fichier en entrée fichier1.txt contenant les lignes suivantes:
programme.sh #!/bin/bash
read x;LF
echo $x;LF
read y;LF
echo $y;LF
read z;LF
echo $z;LF
fichier1.txt a b cLF
d e fLF

Lorsqu'on exécute programme.sh on obtient sur le terminal:
Terminal
User-name@nom-ordinateur ~
$ sh programme.sh < fichier1.txt
a b c
d e f


_

User-name@nom-ordinateur ~
$

Ce qui signifie que read x lit l'intégralité de la première ligne jusqu'au retour chariot sur UNIX symbolisé par LF. Et read y lit l'intégralité de la deuxième ligne. Et read z ne lit rien mais affiche l'absence de ligne supplémentaire comme quelque chose.

En ce qui concerne le fonctionnement de notre programme sh V1langue.sh < donnees-lang.txt permet grâce à l'opérateur de redirection des flux en entrée d'utiliser le fichier donnees-lang.txt au lieu de taper manuellement l'adresse des fichiers qu'on va associer aux variables. Donc le fichier donnees-lang.txt est ouvert par l'environnement bash et suivant l'ordre d'apparition des commandes read, chaque variable postposée est associée à l'une des lignes du fichier donnes-lang.txt. Ces lignes contiennent des valeurs dont l'existence peut être virtuelle ou effective. Et la première des valeurs de read, ./TABLEAUX/bouchon-langue.html, est virtuelle car read ne crée pas les fichiers mais l'opérateur de redirection des flux en sortie >> crée ce fichier car il n'existe pas encore puis l'ouvre pour écrire "quelque chose" grâce à la commande echo dedans.

Terminal
User-name@nom-ordinateur ~
$ echo "quelque chose" >> bouchon-langue.html


_

User-name@nom-ordinateur ~
$

read fic1;
Lit le fichier ./URLS/conteneur-lang qui contient la liste des URLs pour bouchon dans le sens de conteneur dans la langue x.
echo "Téléchargement tableau 1...";
Annonce à l'utilisateur que Bash est en train de lire la liste des URLs pour le premier tableau, c'est à dire le tableau bouchon dans le sens de conteneur.
echo "<html><head><title>Bouchon dans la langue x</title></head><body bgcolor=\"lightblue\"><h2><font color=\"red\">Bouchon dans la langue x</font></h2>" >> $tablo;
Ouvre l'html grâce à la balise html <html>?<à la balise/html>
Sépare l'en-tête du document de son corps grâce <head>?</head> et à la balise <body>?</body>
Met un titre dans la barre de titre grâce à la balise <title>?</title>
Crée un titre de taille assez grande grâce à la balise<h2>?</h2>
Rajoute le tout sans écraser ce qu'il y avait avant (on aurait pu mettre > car il n'y avait rien avant mais j'ai mis >>) grâce au métacaractère Bash >> dans la variable $tablo associée à ./TABLEAUX/bouchon-langue.html
L'ensemble des commandes echo dans le programme avec des balises html ont été pensées afin de réaliser un tableau de ce type:

CONTENEUR: traduction
URL 43 PAGE ASPIREE PAGE DUMP PAGE CONTEXTE
URL 44 PAGE ASPIREE PAGE DUMP PAGE CONTEXTE
URL 45 PAGE ASPIREE PAGE DUMP PAGE CONTEXTE

i=1
Le compteur a été initialisé à 1 avant d'appliquer les traitements automatiques et une seule fois pour tout le programme afin que les tableaux ne recommencent pas tout de zéro à chaque fois.
for nom1 in `cat $fic1`
La boucle for permet d'appliquer le même traitement pour toutes les lignes du tableau.
wget -O ./PAGES-ASPIREES/Portugais/$i.html $nom1
wget est un logiciel qui permet de télécharger les pages html du fichier ./URLS/conteneur-lang et l'option -O permet de renommer le fichier avec le numéro que le compteur a choisit là où on a choisit de le mettre. Par exemple si on a un dossier TEST et que l'on souhaite mettre l'URL http://www.apple.fr dedans, on fait:
$ wget -O ./TEST/nom-choisit.html http://www.apple.fr
lynx -dump -nolist $nom1 > ./DUMP-TEXT/Langue/$i.txt
Lynx est un navigateur tout comme Internet Explorer, Mozilla Firefox ou Safari qui affiche du texte sans les images. L'option -dump permet de récupérer le texte à l'écran au lieu de l'ouvrir dans le navigateur lynx. L'option -nolist permet de retirer les liens de la page web affichés à la façon de lynx, c'est-à-dire avec des numéros entre crochets [1] [2] et des notes en bas de page 1.http:// 2.http://
lynx -dump http://www.geocities.com/laviedesbouchonssurleweb/index.html > pageavecliens.txt
lynx -dump -nolist http://www.geocities.com/laviedesbouchonssurleweb/index.html > pagesansliens.txt
egrep -i "\bmotif\b" ./DUMP-TEXT/Langue/$i.txt > ./CONTEXTES/Langue/$i.txt
Egrep recherche le motif correspondant à l'expression régulière donné dans les lignes du fichier en entrée et imprime les lignes trouvées dans le fichier en sortie. \b est une frontière de début ou fin de mot, voici quelques uns des éléments permettant d'écrire une expression régulière:
\w = caractère alphanumérique
\b = début de mot ou fin de mot
+ = au moins une occurrence du caractère d'avant
. = n'importe quel caractère sauf le retour à la ligne
? = caractère d'avant est présent soit 0 fois soit 1 fois
* = le caractère d'avant peut être présent de 0 à un nombre quelconque de fois
| = ou inclusif
( ) = toute la chaîne ex: (a|A)(lphabet)(s|$)
[ ] = tous les caractères ex: [a-z A-Z 0-3]
(^ )= en début de ligne ex: (^Il)
$ = fin de ligne ex: et$
[^ ]= qui n'appartiennent pas à telle classe de caractères ex: [^ aeiou]
cat ./CONTEXTES/Langue/$i.txt >> ./CONTEXTES/Langue/contexte-conteneur-lang.txt
cat concatène toutes les lignes de chaque fichier ./CONTEXTES/Langue/$i.txt et les imprime à la queue leu leu dans ./CONTEXTES/Langue/contexte-conteneur-lang.txt qui nous servira comme support pour l'édition des nuages de mots.
Finalement
let "i+=1" ;
permet d'attribuer un nombre différent à chaque fichier lu.

Légende des couleurs pour le texte simple:

Couleur du texte
Couleur des liens
Couleur des liens lors du clic
Couleur des liens après le clic - liens déjà vus
Couleur des commandes sur le terminal
Couleur du texte affiché par les fichiers du terminal
Couleur des fichiers en soi-même
Couleur des commentaires et de la commande initiale
Couleur des commandes et des métacaractères
Couleur des variables crées
Couleur des variables rappelées