Il existe de nombreux shells: sh, zsh, ksh, bash, csh, tcsh, etc. Leur syntaxe varie beaucoup. Les corrections de ce TP seront données pour le shell bash uniquement. Il est assez répandu (c'est le shell par défaut de GNU/Linux et MacOS, entre autres). Vous pouvez, bien sûr, faire le TP avec n'importe quel shell.

L'élève curieux pourra également se reporter au TP analogue proposé en 2007 par Antoine Miné.

Aide

Vous aurez probablement besoin des commandes Unix suivantes:

  • man(1) pour comprendre l'utilisation de ces commandes! Le numéro entre parenthèse indique la section du manuel (option -s) où est documentée la commande (utile en cas d'homonymes). man man pour bien commencer.
  • echo(1) pour écrire un message à l'écran ou dans un fichier (redirection avec > et >>),
  • test(1) pour tester le type d'un fichier ou comparer des valeurs,
  • sed(1) pour effectuer des substitutions de chaînes de caractères (commande s/.../.../g en particulier),
  • grep(1) pour filtrer les lignes d'un fichier,
  • sort(1) pour ordonner les lignes d'un fichier et éventuellement supprimer les doublons (option -u),
  • tar(1) pour décompresser des archives .tar, .tar.gz, .tgz.
  • md5sum(1) pour calculer et vérifier la valeur du haché MD5 d'un fichier

Vous pouvez également vous reporter à la documentation de bash, à bash(1) et au cours.

On rappelle enfin qu'un script shell est un fichier texte toto.sh qui commence par une ligne précisant le nom de l'interpréteur, par exemple:

#!/bin/bash

(ou tout autre shell de votre choix) et qui est rendu exécutable par la commande chmod +x toto.sh. Il suffit alors de taper ./toto.sh pour l'exécuter. top

Exercice 1 - Affichage

  1. Écrire le programme Hello World! en shell.


  2. Écrire un script shell qui affiche les nombres premiers entre 2 et un entier n passé en argument.
    (Crible d'Erathosthène)


  3. Lorsqu'une commande prend en argument un chemin est que celui-ci n'existe pas, un message d'erreur est affiché, par exemple :

    % ls /usr/lib/thissoft/config/Makefile
    /usr/lib/thissoft/config/Makefile: No such file or directory.

    Écrire un script shell verif qui affichera la partie gauche du chemin qui est valide et la première entrée inexistante :

    % verif /usr/lib/thissoft/config/Makefile
    /usr/lib/thissoft: No such directory.



  4. Écrire un script shell permettant d'afficher l'arborescence d'un répertoire.
top

Exercice 2 - Gestion des fichiers

  1. Écrire un script shell qui renomme les fichiers dont le nom contient une ou plusieurs espaces
    (en remplaçant les espaces par _ par exemple).


  2. Écrire un script shell qui produit la liste de tous les fichiers de taille supérieure à n Mo (où n est un entier passé en argument).


  3. Écrire un script shell qui recherche les fichiers en double dans un répertoire donné.


  4. Écrire un script shell qui crée une archive .tag.gz de tous les fichiers modifiés pendant les dernières 24 heures.


  5. Écrire un script jeter qui permet de manipuler une poubelle à fichier - un répertoire - nommé poubelle et situé à votre racine. La commande accepte trois options:
    1. jeter -l pour lister le contenu de la poubelle ;
    2. jeter -t pour donner la taille de la poubelle ;
    3. jeter -s fichier chemin pour sortir le fichier fichier de la poubelle et le placer à l'emplacement chemin ;
    4. jeter -v pour vider la poubelle ;
    5. jeter fichier1 fichier2 ... pour déplacer les fichiers considérés vers la poubelle ;
    Si la poubelle n'existe pas, elle est créée à l'appel de la commande.
top