Un script, un script… C’est bien joli. Mais pour faire quoi ?
On aurait pu faire un script du genre :
#!/bin/bash
echo “Hello World!”
Mais on aurait pas été plus avancés. Ici, il s’agit de réaliser un script prenant en entrée une liste d’URLs contenues dans un fichier texte et dont les pages web contiennent un mot-clé (ici, le mot “char”). Ce script rend en sortie une page au format HTML, contenant un tableau, qui lui-même contient des liens vers :
- chaque page listée
- une copie locale de chaque page
- une version texte brut de chaque page
ET surtout, une ligne de concordance avec le mot “char” dans son contexte.
Première étape : traiter les données en lecture
Dans un premier temps, nous avons étudié les différentes commandes à prendre en compte dans la programmation de ce script. L’idée que nous en avions au départ était de lire le fichier d’urls et de placer les urls dans un tableau en réalisant le lien vers la page web concernée. Le principal problème avec ce script était que le fichier d’input contenait les urls classées par “sens”. Donc quand le script lisait le fichier, il fallait qu’il soit capable de différencier une ligne “url” d’une ligne de “sens” (ou d’une ligne vide).
or, une ligne d’url commence nécessairement par “http”. Donc, il suffisait à notre script de prendre les quatres premiers caractères de chaque ligne, et en fonction de ces caractères :
- de créer une ligne avec un lien si les 4 caractères étaient “http”
- de créer une ligne de texte brut dans le cas contraire.
A vue de nez, facile :
- compteur=1
for ligne in `cat <nom de fichier>` {
deb= ‘expr substr $ligne 1 4’
On implémente un compteur, puis on lance une boucle qui prend les lignes du fichier une par une (via la commande cat) avant de leur faire subir une série d’opérations. On commence par expr avec l’attribut substr 1. Cette commande permet de copier les 4 premiers caractères de la variable $ligne (qui, par une habile coïncidence contient le texte de la ligne à traitée) et de les placer dans la variable $deb. On n’a plus ensuite qu’à regarder si ces 4 caractères correspondent à la chaîne de caractère “http”.
- if [ "$deb" == "http" ] then
<création de ligne avec lien hypertexte>
else
<création de ligne texte>
fi
- Si la condition est vérifiée, alors on crée dans le tableau un lien que l’on appelle “url$compteur”, ce qui donne url1 pour le premier lien, url2 pour le second, and so on. Après quoi, on incrémente la variable $compteur de 1
- Si la condition se vautre, on prend la ligne telle quelle et on la place dans une case du tableau sans incrémenter quoi que ce soit.
Voici le résultat obtenu :
1 : la commande expr et surtout son attribut substr vont nous poser problème dans un futur proche… Nous en reparlerons.