mercredi 10 novembre 2010

problèmes de la commande "if"

Voici un script qui marche:

#!/bin/bash
echo "Donnez le nom du dossier contenant les fichiers avec les liens http: ";
read dossier;
echo "Donnez le nom du fichier pour enregistrer le tableau des liens: ";
read tabl;
echo "<html><head><title>Tableau de liens http</title></head><body><table border=\"1\"><tr><td>sens</td><td></td><td>adresse web</td></tr>" > $tabl;
n=1;
for fichier in `ls $dossier`
do
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="médical";
elif [ $theme = "e" ]; then
sens="électrique";
fi
echo "sens = $sens";
for lien in `cat $dossier/$fichier`
do
echo "<tr><td>$sens</td><td>$n</td><td><A href=\"$lien\">$lien</A></td></tr>" >> $tabl;
n=`expr $n + 1`;
done
done
exit;


Ce script prend le nom du dossier qui contient des fichiers des URLs. Les noms de ces fichiers sont significatifs. La première lettre du nom du fichier indique le sens du mot dans ses URLs. (Le fichier  b_en_txt.txt contient des liens vers des pages dont le sens du mot "bouton" est "botanique".)
Nous voulons faire un tableau html de liens, qui indique le sens du mot pour chaque lien. Donc, dans le tableau, il y aura 3 colonnes: sens, numéro du lien, lien.

D'abord, nous séparons la première lettre du nom du fichier et placeons sa valeur dans la variable "theme":

for fichier in `ls $dossier`
do
echo "fichier = $fichier";
theme=`echo $fichier | cut -d_ -f1`;
echo "theme = $theme";

La commande "cut" retourne le premier élément du nom de fichier, séparé du reste par l'underscore: b_en_txt.txt
Après l'exécution de cette commande, la variable "theme" contient la valeur "b", ou "c", ou "m", ou "e".

Ensuite, en fonction de la valeur de la variable "theme", nous attribuons un sens à la variable "sens", que nous mettrons ensuite dans le tableau html. Nous le faisons à l'aide de la commande "if".

En écrivant cette commande dans notre script, nous avons rencontré des problèmes, que Mr Belmouhoub nous a aidé à résoudre.La commande "if then" ne marchait pas. Après plusieurs essais, Mr Belmouhoub a compris que sous cygwin, il fallait absolument:

1 mettre un point-virgule après le crochet de test: ];

2 mettre des espaces dans le test:
après le crochet ouvrant et avant le crochet fermant: [espace...espace]
avant et après le signe d'égalité: espace=espace

3 mettre des quillemets autour du sens de la variable "theme" dans le test: "b"

4 ne pas mettre de guillemets autour de la variable "$theme" dans le test: $theme

Bon courage dans l'utlisation de la commande "if"!

Aucun commentaire:

Enregistrer un commentaire