Travaux Dirigés de aas
1. Shell avancé

Les systèmes Unix sont en bonne partie administrables sans programmation de bas niveau, à l'aide de fichiers de configurations et de scripts écrit dans le langage Shell. Cette première séance est consacrée à une revue assez exhaustive de ce langage. Il en existe plusieurs variantes, toutes facilement compilable dans les différentes versions d'Unix. On a choisi ici le Bourne Again Shell, dont le livre de référence est Learning the Bash Shell de Newham & Rosenblatt publié chez O'Reilly (1998 pour la deuxième édition).

Fondamentalement, Shell est un langage de manipulation de chaînes de caractères (en particulier les noms de fichiers et leur contenu quand ils sont textuels), le mécanisme de base étant de remplacer une chaîne par une autre : on remplace un caractère spécial par son expansion, une variable par sa valeur, une commande Unix par le flux de sortie qu'elle calcule etc. Ces substitutions ont lieu en 11 étapes (voir référence ci-dessus page 178), qu'il est important de connaître si l'on veut anticiper les conséquences, notamment syntaxiques, de ce qu'on écrit en Shell. Ce recueil d'exercices est rythmé par ces onze étapes qui permettent de passer en revue les principales commandes du shell.



1 Analyse lexicale

L'analyseur du Shell sépare les entités lexicales sur la base :

En conséquence, si l'on se trouve dans un répertoire contenant 4 fichiers x, y, z, t, dites quelles seront les réponses du Shell pour les entrées suivantes (on rappelle que la commande ls (list segments donne la liste des entrées, et que la commande wc donne le nombre de mots, de caractères et de lignes du flux d'entrée):