:: Enseignements :: Licence ::
L1
:: 2008-2009 :: Unix ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Des redirections aux scripts |
On revoit quelques redirections, ainsi que les variables shell, et on écrit notre premier script.
Rappel des redirections :
- < redirection de l'entrée standard depuis un fichier donné
-
> redirection de la sortie standard vers un fichier donné
-
2> redirection de la sortie d'erreur vers un fichier donné
-
>> redirection de la sortie standard vers la fin d'un fichier donné
-
| tube de la sortie standard d'une commande vers l'entrée standard d'une autre
-
$(...) utilisation en ligne de commande de la sortie d'une commande
Exercice 1 - Redirections et base de donnée
-
Téléchargez le texte compressé à l'adresse flickr-comments.txt.gz. Il contient 10000 commentaires faits sur les photos du site de partage d'images Flickr.
- Nous ne décompresserons pas le fichier, pour ne pas prendre trop de place sur le disque. Afficher le fichier (zcat).
- Ce fichier est gros. Pour mieux voir, redirigez la commande précédente pour n'afficher que quelques lignes (head, tail) ou bien visualiser page par page (more, less).
Chaque ligne du fichier correspond à un commentaire. Les colonnes correspondent aux champs suivants :
- date d'aspiration
- identifiant photographe
- identifiant photo
- identifiant commentateur
- date du commentaire
- texte du commentaire
Le séparateur entre les champs est la tabulation \t; le séparateur entre les commentaires est le retour à la ligne \n.
Les lignes sont triées par identifiant photo. La photo "74" du photographe 12037949754@N01 peut par exemple être vue à l'addresse http://www.flickr.com/photos/12037949754@N01/74.
- Trouvez et affichez les commentaires contenant le mot "Flickr", ou le mot "Paris", ou le mot "face" (grep).
- Affichez uniquement le texte des commentaires (cut).
- Affichez uniquement les champs "identifiant de photographe" et "commentaire" (cut ou awk qui gère directement les champs séparés par des tabulations).
- Même question que précédemment, mais en triant le résultat selon l'identifiant du photographe (sort).
- Même question, en supprimant les doublons (uniq).
- Comptez le nombre de photos différentes (wc).
- Affichez le contenu du fichier trié selon la date du commentaire.
- Lister les mots qui apparaissent dans les commentaires avec leurs fréquences et en triant par fréquences décroissantes (tr).
Exercice 2 - Manipulation de bitmap
-
Téléchargez l'image tiger.pgm, visualisez-la (display) et ouvrez-la dans un éditeur de texte. Les fichiers PGM-ASCII sont un type d'images bitmap. Après un entête de quatre lignes précisant le type du fichier, un commentaire éventuel, la taille de l'image, le nombre de niveaux, on y voit une séquence de nombres entre 0 et 255 qui représentent le niveau de gris des points successifs de l'image (0=noir et 255=blanc).
- Recherchez un point qui n'est ni noir ni blanc, par exemple un point dont le niveau commence par 1. Rappel : vi, grep, et autres peuvent chercher des expressions rationnelles, dans lesquelles ^ représente le début de ligne, $ la fin de ligne, . un caractère quelconque...
- Remplacez tous les niveaux jusqu'à 99 par 0, et tous les niveaux à partir de 100 par 255. Observez l'image en noir et blanc obtenue (display).
- Fermez l'éditeur. Le format PPM est l'équivalent du format PGM, mais en couleur : chaque point est représenté par un niveau de rouge, un niveau de vert, un niveau de bleu. Téléchargez le fichier tiger.ppm et observez son contenu : après l'entête, les lignes contiennent trois nombres entre 0 et 255 séparés par des tabulations (caractère \t).
- La couleur (204,114,38) est un orange. En ligne de commande, remplacez-la par (179,38,204) pour obtenir un nouveau fichier tiger2.pgm et observez le résultat (display).
- Écrivez cette dernière commande dans un fichier colorie.sh, pour lequel vous vous donnerez les droits en exécution, et qui contiendra #! /bin/bash (nom de l'interpréteur) comme première ligne. Exécutez ce script (./colorie.sh).
- Un script peut accéder aux arguments en ligne de commande via $1, $2... Modifiez le script pour qu'il prenne en argument le fichier sur lequel faire la modification et le fichier vers lequel enregistrer la nouvelle image.
- Changez ce script pour qu'il prenne en argument les trois niveaux de la couleur vers laquelle vous voulez remplacez le orange.
- À partir de là, ce sont des questions bonus. Faites peut-être l'exercice suivant avant. Modifiez votre script pour qu'on ait le choix de spécifier une couleur, avec l'option -o, ou pas, auquel cas on remplacera par une couleur par défaut (blanc).
Même question pour la couleur à remplacer, avec l'option -c.
- Faites en sorte que l'on puisse prendre l'argument des couleurs avec les trois composantes entre parenthèses et séparées par des virgules, comme "(174,38,204)" (echo, cut).
- Faites en sorte que votre script puisse prendre en argument des noms de couleur anglophones, en allant chercher les niveaux rouge-vert-bleu correspondants dans le fichier /etc/X11/rgb.txt.
- En fait, les fichiers PNM (PPM, PGM, PBM) ne font pas la différence entre retours à la ligne, tabulations, espaces. Le fichier tiger0.ppm est par exemple toujours valide. Téléchargez-le et observez les différences avec le précédent.
Pour faire les observations de remplacement de couleur comme ci-dessus, le plus simple est de le transformer au préalable pour remettre les trois composantes d'un même point sur une même ligne. Comment faire (tail, tr, sed) ?
Exercice 3 - Chemins d'exécution
-
Placez vos scripts éventuels dans un répertoire ~/bin. Modifiez la variable d'environnement PATH pour qu'il inclue ce chemin, de sorte que les scripts soient exécutables de n'importe où.
- Pourquoi, si vous ouvrez un autre terminal, cela ne fonctionne plus ? Remédiez-y (export).
- Définissez un alias lla qui définisse un ls qui affiche les fichiers cachés au format long (alias).
- Modifiez (ou créez si nécessaire) le fichier ~/.bashrc se trouvant à la racine de votre compte pour que ces deux dernières modifications persistent aux prochains démarrages de votre session.
- Que contient le fichier ~/.bash_history également à la racine de votre compte ?
- Affichez toutes les variables d'environnement (env). Affichez uniquement celles dont les valeurs contiennent fr.
- Changez la langue des pages de manuel (variable LC_ALL).
© Université de Marne-la-Vallée