Université Pierre et Marie Curie

Systèmes d'exploitation des ordinateurs

Chapitre 1. Les systèmes d'exploitation
Chapitre 2. Mécanismes d'exécution et de communication
Chapitre 3. Gestion des activités parallèles
Chapitre 4. Gestion des fichiers
Chapitre 5. Partage des ressources
Chapitre 6. Au-dessus du système d'exploitation
6.1. Programmation shell sous Unix
6.1.1. notions de base
6.1.2. Contrôle de flux
6.1.3. Fonctions
6.1.4. Démarrage de session
6.2. Compilateurs
6.3. Fichiers et bases de données
6.4. Sauvegardes et archivage
Chapitre 7. Notions sur les communications
Chapitre 8. Notions sur la sécurité
Bibliographie
Chapitre 9. Exercices et TPs
Examens
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

6.1. Programmation shell sous Unix

Un utilisateur se voit affecter, dans son profil de démarrage, un shell de commande. Les plus connus, dans leur ordre d’apparition, sont le Bourne Shell, le C shell, le Korne shell puis avec l’apparition de Linux un avatar de ce dernier le bash (Bourne again shell) conforme à la norme POSIX 2. Lorsqu'on ouvre une fenêtre de fait on lance une copie du shell qui emploie celle-ci pour communiquer. Les données du clavier parviennent au shell par son entrée 0 ou stdin, les écritures se font dans la fenêtre, par défaut, pour les sorties stdout ou 1 et stderr ou 2.

démarrage d'une commande

 

Un shell est un programme d’interprétation de commandes lancé automatiquement dans un nouveau processus lorsqu’on ouvre une fenêtre terminal. Son fonctionnement est décrit dans le schéma ci-contre.

Bien que désuet le Bourne shell doit être mentionné car il existe encore beaucoup de procédures d’installation et d’exécution de programmes qui l’emploie. Le C shell possède plus de fonctionnalités et l’existence d’un éditeur ligne permet de rappeler une commande précédemment exécutée, enregistrée automatiquement dans le fichier .history, pour la rééditer avant de l’exécuter. Les autres shells sont des avatars de ce dernier et n’en différent pas profondément.

  1. nom d’une commande ou d'un programme.
  2. Le processus shell explore alors séquentiellement tous les répertoires indiqués dans la variable d’environnement PATH.
  3. Si la commande est reconnue il lance un processus fils dont le code est celui de la commande décodée. Les autres sous-chaînes sont les arguments de la commande.

Dans un système bien configuré les répertoires explorés, décrits dans la variable PATH, sont d’abord ceux du système (/usr/bin, /usr/local/bin pour un système Linux) puis des répertoires additionnels fonction de l’environnement créé pour l’utilisateur. Pour des raisons de sécurité le répertoire courant de l’utilisateur ne doit pas être inclus : cela permet d’éviter l’emploi de fausses commandes déposés chez un usager mal protégé par un pirate éventuel. C’est la raison pour laquelle le lancement d’un programme personnel se fait en spécifiant exactement son répertoire c'est-à-dire pour le répertoire courant en ajoutant les caractères ./ à son nom.

Un shell est beaucoup plus qu’un simple interpréteur. Il possède tous les éléments d’un langage de programmation : variables, fonctions d’entrées-sorties, contrôles de flot (boucles, tests...), fonctions...  et il est possible de réaliser des procédures qui permettent d’enchaîner des commandes, des programmes, de tester des codes de fonctionnement, l’existence ou la non existence de fichiers... bref de réaliser des fonctionnements complexes qui font appel à des programmes qui s’exécutent successivement de façon conditionnelle. Il s’agit donc d’un outil très puissant dont il convient de posséder des notions.

Nous nous limiterons, dans ce chapitre, à une brève description des principes de base. Des manuels complets existent sur le Web auxquels on pourra se référer.


Copyright Yves Epelboin, université P.M. Curie, février 2003, MAJ 25 février, 2007

  6.1.1. notions de base
  6.1.2. Contrôle de flux
  6.1.3. Fonctions
  6.1.4. Démarrage de session
Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante