TP Licence Réseaux Informatiques et Télécommunication

Transcription

TP Licence Réseaux Informatiques et Télécommunication
TP Licence Réseaux Informatiques et Télécommunication
Introduction à Perl - Partie 2.
Les trois premiers exercices doivent être résolus sans l’aide de la machine. Pour les suivants, il est
demandé de les implémenter.
Exercice 1 (Expressions régulières)
1. Indiquer dans chaque case du tableau si oui ou non le mot de la ligne est accepté par l’expression
régulière de la colonne.
abc* abc ^a|bc ^(a|b) ca|ba|ad [ab][cd]
"abd bc"
"d cdab"
"adabcabc"
"bdabdaca"
2. Est-il possible de trouver un mot accepté par abc+ mais pas par abc* ?
3. Est-il possible de trouver un mot accepté par (ab|ac) mais pas par a(b|c) ?
4. Après avoir listé les fichiers du dossier /tmp/, on a obtenu :
script.pl
linux.ps1
a_faire_txt
applications
papiers_apl
fichier.plot
Donner l’expression régulière qui reconnaı̂tra les fichiers perl.
Exercice 2 (Ecriture et lecture)
1. On dispose du tableau suivant :
@tab = (
"commande=ls,afficher la liste des fichiers dans le dossier courant. -LiSt-" ,
"commande=df,afficher l’utilisation des disques. -Disk Free- ",
"commande=du,afficher l’utilisation du disque.-Disk Usage- " ,
);
Compléter le script suivant de sorte qu’il rende humain chaque élément de ce tableau. Exemple :
il affichera la chaı̂ne Si vous souhaitez afficher la liste des fichiers dans le dossier courant, il suffit
de taper la commande ls, (LiSt) après avoir traiter la première case du tableau @tab.
foreach $chaine ( @tab )
{
______________________________
# Extraction des parties nécessaires
$commande = _________;
# affectation
$action = _________;
# affectation
$traduction = _________;
# affectation
print "Si vous souhaitez $action, il suffit de
taper la commande $commande, ($traduction). \n";
}
2. On dispose toujours du tableau @tab et on donne ce script à trou :
foreach $chaine ( @tab )
{
$chaine =~ s/^commande=(.*),(.*)-(.*)-/________________/;
print "$chaine \n";
}
Compléter le script précédent avec une substitution de sorte que la sortie écran soit la suivante :
1
TP Licence Réseaux Informatiques et Télécommunication
perl essa2.pl
ls : LiSt
df : Disk Free
du : Disk Usage
Exercice 3 (Ecriture et lecture)
1. Le fichier /etc/passwd est un fichier de texte qui contient la liste des comptes sur le système,
ainsi que des informations utiles sur ces comptes . . .Voici un exemple de fichier /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...
avahi:x:110:121:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
haldaemon:x:111:122:Hardware abstraction layer,,,:/var/run/hald:/bin/false
nico:x:1000:1000:Nicolas Delanoue,,,:/home/nico:/bin/bash
Compléter le script suivant de sorte qu’il sauve dans le fichier utilisateurs la liste des utilisateurs ainsi que leur nom complet.
open FICHIER1, "_____________";
open FICHIER2, "_____________";
while( $ligne = <FICHIER1> )
{
@tab = ____________________ ;
$var = "$tab[0],$tab[4]";
____________________________ ;
}
close FICHIER1;
close FICHIER2;
#Ouvre le fichier passwd en lecture
#Ouvre le fichier utilisateurs en écriture
#Divise $ligne en utilisant : comme délimiteur
#______________________________________
#Ecrit $var dans le fichier utilisateurs
Exercice 4
Nautilus permet d’exécuter des scripts à partir d’un menu contextuel. On obtient ce menu en cliquant
dans le panneau de droite (celui qui affiche les fichiers) avec le bouton droit de la souris. Nautilus
affiche alors un élément de menu nommé “Scripts” qui donne accès à tous les scripts enregistrés dans
le répertoire ~/.gnome2/nautilus-scripts. Un script situé dans ce répertoire est un script tout-àfait normal : il peut être codé dans n’importe quel langage : pour nous, ce sera évidemment Perl.
Avant de lancer un tel script, Nautilus fixe certaines variables d’environnement. Parmi ces variables
d’environnement, la variable NAUTILUS_SCRIPT_CURRENT_URI nous intéresse plus particulièrement : elle
désigne l’URI (Uniform Resource Identifier) du “répertoire” sélectionné. Par exemple, si on a ouvert le
répertoire /home/etudiant/, alors cette variable vaut file:///home/etudiant.
Le but de cet exercice est d’écrire un script Perl qui permet d’ouvrir une console “dans” le répertoire
actuellement sélectionné dans Nautilus.
En Perl, les variables d’environnement sont accessibles en utilisant la table de hachage %ENV. Ainsi
lorsque vous lancerez votre script par l’intermédiaire de Nautilus, vous récupérerez dans
$ENV{’NAUTILUS_SCRIPT_CURRENT_URI’} l’URI du répertoire actuellement sélectionné. Bien sûr, si
vous lancez votre script depuis un shell, la variable $ENV{’NAUTILUS_SCRIPT_CURRENT_URI’} n’aura
pas été initialisée et sera donc vide ! On vous propose d’écrire ce script en suivant les étapes suivantes :
1. Préparatifs :
(a) créez un script nommé Shell.pl et rendez-le exécutable.
(b) complétez ce script pour qu’il affiche “coucou” dans le fichier /tmp/shell.log.
(c) exécutez ce script depuis une console pour vérifier qu’il fonctionne.
(d) exécutez-le depuis Nautilus (en faisant : clic droit—Scripts—Shell) pour vérifier que ça fonctionne.
2
TP Licence Réseaux Informatiques et Télécommunication
(e) pour faciliter la suite de vos expérimentations, vous pouvez, dans une autre console, lancez la
visualisation du fichier shell.log en continu grâce à la commande : tail -F /tmp/shell.log
(on pourra consulter le manuel de tail pour comprendre l’intérêt de cette commande).
2. Récupération de l’URI du répertoire :
(a) modifiez votre script pour y écrire en plus la valeur de la variable d’environnement
NAUTILUS_SCRIPT_CURRENT_URI.
(b) exécutez-le depuis un shell (cela vous permettra de vérifier qu’il n’y a pas d’erreur de syntaxe)
puis depuis Nautilus : est-ce que vous récupérez bien le nom du répertoire ?
3. Récupération du nom du répertoire :
(a) utilisez une expression régulière qui vous permettra de récupérer le nom du répertoire puis
affichez ce nom dans le fichier de log.
(b) testez
4. La commande système permettant de lancer une console dans le bon répertoire est
gnome-terminal --working-directory=/le/chemin/.
Faites en sorte d’ouvrir la console dans le répertoire que vous avez récupéré à la question
précédente.
5. Assurance qualité :
(a) avant d’ouvrir le répertoire, vérifiez que votre expression régulière a bien correspondu (ce qui
n’est certainement pas le cas si, dans Nautilus, vous étiez dans un répertoire réseau du genre
smb://serveur-windows/partage). Si ce n’est pas le cas, affichez-en une trace dans le fichier
de log.
(b) avant d’ouvrir le répertoire, vérifiez qu’il existe bien (utilisez l’opérateur qui va bien). Si ce
n’est pas le cas, affichez-en une trace dans le fichier de log.
Exercice 5
Le langage HTML, est le format de données conçu pour représenter les pages web. Il permet notamment
d’implanter de l’hypertexte dans le contenu des pages et repose sur un langage de balisage. Par exemple,
pour que du texte apparaı̂ssent en italique il suffit de le mettre entre les balises <i> et </i>.
Pour insérer une image, il suffit d’utiliser la balise <IMG>. L’exemple suivant permet d’introduire une
image nommée image.gif stockée dans le répertoire images : <IMG SRC="images/image.gif">.
L’objectif du script que vous devez developper est, à partir d’une page web :
http://perso-laris.univ-angers.fr/~delanoue/lprt/developpement/pics/index.php,
de créer une page web index2.html qui contient les mêmes informations exceptées le fait que les
images ont une plus petite résolution (800x600).
Pour cet exercice, vous aurez besoin de wget et de convert qui fait partie du package ImageMagick.
L’exemple suivant permet de convertir l’image dragon.gif en resize_dragon.gif telle que cette
dernière ait une résolution de 64x64 :
convert dragon.gif -resize 64x64
resize_dragon.gif
La page que vous devez “transformer” se trouve à l’adresse :
http://perso-laris.univ-angers.fr/~delanoue/lprt/developpement/pics/index.php.
Vous pourrez vous contenter de laisser le fichier index2.html ainsi que les images redimmensionnées
sur votre machine. Par contre, vous devrez remplir un journal (fichier log) qui tiendra à jour l’ensemble
des événements survenus.
Pour aller plus loin : lors de l’ajout d’une modification de la page index.html (exemple : ajout
ou suppression d’une image), faite en sorte que votre script ne télécharge pas toutes les images déjà
téléchargées.
3
TP Licence Réseaux Informatiques et Télécommunication
"abd bc"
"d cdab"
"adabcabc"
"bdabdaca"
abc*
o
o
o
n
abc+
n
n
o
n
^a|bc
o
n
o
n
open FICHIER1, "< /etc/passwd";
open FICHIER2, ">utilisateurs";
while( $ligne = <FICHIER1> )
{
@tab = split /:/,$ligne;
$var = "$tab[0],tab[4]";
print FICHIER2 "$var\n";
}
close FICHIER1;
close FICHIER2;
^(a|b)
o
n
o
o
ca|ba|ad
n
n
o
o
[ab][cd]
o
n
o
o
#Ouvre le fichier en lecture
#Ouvre le fichier en écriture
#Divise $ligne en utilisant : comme délimiteur
#
#Ecrit $var dans le fichier utilisateurs
foreach $chaine ( @tab )
{
$chaine =~ /commande=(.*),(.*)\..*-(.*)-/;
$commande = $1;
$action = $2;
$traduction = $3;
print "Si vous souhaitez $action, il suffit de taper la commande $commande, ($traduction).
\n";
}
4

Documents pareils