Skip to content

TP3 - Scripts, tests et conditions

Voir le cours : Les scripts

Script

Les scripts sont des programmes qui permettent d’automatiser certaines tâches répétitives telles que l’administration ou les sauvegardes de fichiers. Ce sont des fichiers de texte en général sans extension ; ils ont parfois l’extension .sh ou .bash. Ils contiennent les mêmes commandes que celles exécutées en ligne de commande, plus éventuellement des structures itératives (for, while, until) ou conditionnelles (if) et des appels à des fonctions. Un script contient en général une commande par ligne. Il peut être paramétré, les paramètres sont désignés par $1, $2, … $9.

Exécuter un script shell

Pour exécuter un script shell, il suffit de taper bash suivi du nom de ce fichier dans une fenêtre de terminal. L’interprète exécute les commandes de manière séquentielle, dans l’ordre où elles apparaissent dans le fichier. Si l’on donne les droits d’exécution au fichier et que le fichier est place dans un répertoire défini dans la variable PATH, il suffit de taper le nom du fichier.

La variable PATH

Pour pouvoir exécuter un programme, le système d’exploitation doit pouvoir retrouver le fichier correspondant à cette commande. C’est la variable d’environnement PATH qui contient la liste des répertoires que l’interprète explore pour trouver un programme à exécuter. Vos scripts seront donc placés dans le répertoire $HOME/bin (voir TP2).

  • Vérifiez que le répertoire $HOME/bin existe et qu’il apparaît dans votre variable PATH.

  • Conseil : utilisez un éditeur (graphique) de texte vscode pour écrire vos scripts (comme au TP1) — l’extension shell intégrée donne la coloration syntaxique et les numéros de ligne, ce qui peut être utile lors de la mise au point de vos programmes.

    Si vous ne pouvez pas lancer d’applications graphiques, vous pouvez utiliser l’éditeur de texte nano

  • Pensez à utiliser votre cours et l’aide en ligne pour la syntaxe des commandes.

Scripts à écrire pendant la séance de TD

Section titled “Scripts à écrire pendant la séance de TD”
  1. Tester les paramètres passés à l’exécution d’un script shell

    • Dans le répertoire $HOME/bin, créer le fichier de commandes testparam avec le texte ci-dessous.

      #!/bin/bash
      if [ $1 = "--help" ]
      then
      echo "usage : testparm parametres"
      else
      echo "Les parametres sont : $*"
      fi
    • Que représentent $1 et $* ?

      Voir le cours : Les variables spéciales

    • Que fait [ $1 = "--help" ] ?

      Voir le cours : La commande test

    • Tester ce script en passant 1, puis 2 paramètres, puis le paramètre --help

    • Que se passe-t-il si l’on teste le script sans passer de paramètre ?

    • Changer [ $1 = "--help" ] par [ "$1" = "--help" ] . Le script fonctionne-t-il correctement maintenant ? Pourquoi ?

    • Modifier le script pour que le message usage : testparm parametres soit également affiché lorsque aucun paramètre n’est donné

  2. Tester l’existence de fichier et/ou répertoire

    • Dans le répertoire $HOME/bin, créer un fichier de commandes testfic qui reprend l’exemple ci-dessous.

      #!/bin/bash
      if test $# -eq 0 -o "$1" = "--help"; then
      echo "usage : testfic nomfichier"
      elif [ -f $1 ] ; then
      echo "le fichier $1 existe"
      elif [ -d $1 ] ; then
      echo "le repertoire $1 existe"
      else
      echo $1 est absent !
      fi
    • Tester cette commande pour un fichier et un répertoire existants/non existants.

    • Commenter le code :

      • Que représentent le $# ?
      • Que fait if test $# -eq 0 -o $1 = "--help" ?
      • Que représente [ -f $1 ] ?
    • Afficher « l’aide » de la commande (en lançant le programme avec l’option correspondante)

    • Modifiez le script testfic de façon à ce qu’il permette de tester l’existence de plusieurs fichiers ou répertoires (nombre indéfini de paramètres) en utilisant la commande shift et une itération (voir l’exemple donné en cours).

      Voir le cours : Les paramètres (shift)

Écrire un script typefic qui, pour le paramètre passé, affiche :

  • lien symbolique si c’est un lien symbolique,
  • répertoire si c’est un répertoire,
  • fichier exécutable si c’est un fichier exécutable,
  • fichier pour tout autre fichier,
  • inexistant si rien ne correspond à ce nom.

typefic affichera un message d’aide si aucun paramètre n’est passé.

Attention : l’ordre des tests compte — un lien symbolique vers un répertoire vérifie aussi -d, et un fichier exécutable vérifie aussi -f.