CSC 3102 – Introduction aux systèmes d’exploitation

Portail informatique

TP1 – Bash

Pour faire les exercices, vous avez besoin de connaître le langage bash. Vous pouvez vous référer à l'annexe shell. Vous pouvez aussi trouver une liste d'astuces ici. Tous les exercices sont obligatoires, sauf les exercices notés « défi » ou « optionnel » qui sont optionnels. En particulier, les exercices notés « hors présentiel » sont supposés fait d'une séance sur la suivante.

Le but de cette série d'exercices est de mettre en œuvre vos premiers scripts bash. Avant de pouvoir les exécuter, il faut au préalable les rendre exécutables avec la commande chmod a+x ./mon-script.sh. Cette notion vous sera expliquée dans les prochains cours.

Guide de survie (∼10mn)

Le but de cet exercice est de comprendre comment trouver de l'aide sur les commandes étudiées pendant le module.

Ouvrez un terminal.

Consultez la documentation de la commande hostname. À quoi sert-elle ?

$ man hostname
Montre le nom du système

Exécutez la commande hostname. Vérifiez qu'elle affiche bien le nom de votre machine (avec un nom de domaine complet en .int-evry.fr). Normalement, celui-ci est inscrit sur chaque tour ou écran en salle machine, et suit le modèle <nom_salle>-<numero_machine>. Par exemple, a001-06, si vous êtes connecté sur la 6è machine de la salle A001.

$ hostname b02-06

Consultez la documentation des commandes users et who.

$ man users $ man who

Utilisez ces commandes pour afficher votre identifiant de connexion.

$ users $ who

Mon premier script shell (∼15mn)

De façon à mettre en œuvre votre premier script shell, il faut démarrer un éditeur de texte. Nous vous conseillons fortement d'utiliser emacs. Si vous programmez déjà et avez l'habitude d'un autre outil comme vi, vous pouvez l'utiliser. Il vous est demandé de ne pas utiliser gedit ou nano qui sont particulièrement inadéquats dans ce cours. N'utilisez aussi surtout pas de traitement de texte de type Word ou Libreoffice, car ces derniers sauvegardent les fichiers dans des formats non reconnus par bash.

Lancez un éditeur de texte.
$ emacs

Dans l'éditeur de texte, programmez un script shell qui permet d'afficher la chaîne « Bonjour à tout le monde ! ». Vous nommerez ce script bonjour.sh.

Sur certaines distributions GNU/Linux, vous pouvez omettre le « #! /bin/bash » en début du programme. Nous vous déconseillons fortement d'utiliser cette possibilité car vos scripts deviendraient alors non portables sur d'autres systèmes UNIX ou d'autres distributions GNU/Linux.

Rendez le script exécutable en lançant, dans le terminal, la commande donnée en cours (chmod u+x bonjour.sh).

Exécutez votre script.
$ ./bonjour.sh
Si votre terminal souhaite le bonjour à tous, bravo ! Vous venez de programmer et d'exécuter votre premier script shell !

Manipulation des arguments (∼45mn)

Le comportement d'un script dépend souvent de données extérieures. Ces données peuvent provenir de plusieurs sources : d'un passage d'arguments du script, d'une interaction avec l'utilisateur lui demandant une saisie manuelle, d'un fichiers, etc. La suite de l'exercice vise à apprendre comment manipuler les arguments.

Modifiez le script de l'exercice précédent de manière à ce qu'il complète l'affichage produit avec un argument passé sur la ligne de commande. L'affichage devra être, par exemple :

$ ./bonjour.sh Yoda Bonjour Yoda !

Modifiez votre script afin qu'il prenne en compte non plus un argument, mais tous les arguments donnés sur la ligne de commande. Par exemple :

$ ./bonjour.sh Daenerys Arya Cersei Bonjour Daenerys ! Bonjour Arya ! Bonjour Cersei !

ou

$ ./bonjour.sh "Daenerys Targaryen" "Arya Stark" "Cersei Lannister" Bonjour Daenerys Targaryen ! Bonjour Arya Stark ! Bonjour Cersei Lannister !

Voici le squelette de l'algorithme attendu :

#! /bin/sh # # pour chaque argument de la liste des arguments de la ligne de commande du script # afficher la chaîne Bonjour suivie de l'argument courant suivie de !

Modifiez votre script afin qu'il affiche la chaîne « Bonjour Marcheur Blanc ! » si aucun argument n'a été donné. Voici le squelette de l'algorithme attendu :

#! /bin/sh # # si le script n'a pas d'argument alors # afficher la chaîne Bonjour Marcheur Blanc ! # sinon # pour chaque argument de la liste des arguments de la ligne de commande du script # afficher la chaîne Bonjour suivie de l'argument courant suivie de !

On souhaite maintenant rendre votre script mal élevé. Votre script ne saluera donc plus qu'une personne sur deux. Par exemple :

$ ./bonjour.sh Daenerys Mélisandre Margaery Cersei Arya Bonjour Daenerys ! Bonjour Margaery ! Bonjour Arya !

Voici le squelette de l'algorithme attendu :

#! /bin/sh # # si le script n'a pas d'argument alors # afficher la chaîne Bonjour Marcheur Blanc ! # sinon # tant que le nombre d'arguments est strictement supérieur à 0 # afficher la chaîne Bonjour suivie de l'argument courant suivie de ! # décaler les arguments # décaler les arguments #

Commande echo et les caractères spéciaux du shell (∼10mn – hors présentiel)

Le but de cet exercice est de mettre en évidence l'interprétation des caractères spéciaux du shell avec la commande echo, et de montrer comment désactiver leur interprétation.

Au besoin, vous pouvez interrompre une commande en faisant control+c.

Petit échauffement : affichage de chaînes sans caractère spécial.

  1. Affichez une simple chaîne de caractères, par exemple Bonjour.
    $ echo Bonjour
  2. La commande echo permet d'afficher plusieurs chaînes successivement. Affichez « Bonjour tout le monde ».
    $ echo Bonjour tout le monde
  3. Vous pouvez également afficher des caractères non alphabétiques (tant qu'ils ne font pas partie des caractères spéciaux du shell), comme les caractères de ponctuation, les chiffres, etc. Affichez la chaîne : « 2 fois Bonjour tout le monde ! ».
    $ echo 2 fois Bonjour tout le monde !

Désactivation de l'interprétation d'un caractère spécial.

  1. En utilisant le caractère de désactivation « \ », affichez la chaîne de caractères : « Le # est populaire ».
    $ echo Le \# est populaire
  2. De même, affichez la chaîne de caractères « Le # est plus populaire que le \ ».
    $ echo Le \# est plus populaire que le \\
  3. Toujours en utilisant le caractère de désactivation « \ », affichez la chaîne de caractères « Le # est plus populaire que le \ mais bien moins que l'* ».
    $ echo Le \# est plus populaire que le \\ mais bien moins que l\'\*

Désactivation de l'interprétation de plusieurs caractères spéciaux.

Lorsque plusieurs caractères spéciaux sont présents, les quotes (« ' » et « " ») permettent de désactiver certains caractères spéciaux sur un ensemble de caractères. Pour rappel, les simples quotes ('...'), les désactivent tous, tandis que les doubles quotes ("..") ne laissent actifs que les caractères « $ », « \ » et « ` » (accent grave).

  1. En utilisant les simples puis les doubles quotes, affichez la chaîne de caractères : « Le # est moins populaire que le * ».
    $ echo 'Le # est moins populaire que le *' $ echo "Le # est moins populaire que le *"
    Les caratères spéciaux # et * sont tous deux désactivés par les quotes, qu'elles soient simples ou doubles.
  2. En utilisant les simples puis les doubles quotes, affichez la chaîne de caractères : « Le # est plus populaire que le \ ».
    $ echo 'Le # est plus populaire que le \'
    $ echo "Le # est plus populaire que le \\"
    Tout comme à la question précédente, le caractère spécial « # » est désactivé. En revanche, le caractère « \ » est interprété quand il est entre double quotes. Dans notre cas, s'il n'est pas accompagné d'un second « \ », il désactive les « " » de fermeture de l'expression.