Bourne shell

Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Page d’aide sur l’homonymie

Pour les articles homonymes, voir bsh.

Bourne shell

Description de l'image Version 7 UNIX SIMH PDP11 Kernels Shell.png.
Informations
Développé par Stephen BourneVoir et modifier les données sur Wikidata
Première version
Système d'exploitation UnixVoir et modifier les données sur Wikidata
Environnement Unix
Langues anglais
Type Shell Unix
Utilitaire UNIX (d)
Langage de programmation
Langage en ligne de commande (d)Voir et modifier les données sur Wikidata

modifier - modifier le code - voir Wikidata (aide) Consultez la documentation du modèle

Le Bourne shell ou bsh (ou encore simplement sh dans de nombreuses versions d'UNIX) est un shell Unix. C'est le shell par défaut de la version 7 d'Unix ; dans les versions antérieures d'UNIX, le nom sh désigne le Thompson shell, et dans certaines versions actuelles, il désigne le Korn shell.

Le Bourne shell a été programmé par Stephen Bourne (d'où le nom) d'AT&T Bell Laboratories et a fait son apparition pour la première fois en 1977 sur la version 7 d'Unix qui était distribuée aux universités et académies. Il est resté depuis cette époque le shell par défaut pour les comptes Unix. Le fichier exécutable du Bourne shell ou de tout autre shell compatible se trouve à l'emplacement /bin/sh sur la plupart des systèmes Unix et est toujours le shell par défaut du compte root sur de nombreuses implémentations d'Unix.

Avec son système de tubes connectant la sortie d'une commande à l'entrée d'une autre, il permet d'écrire des scripts complexes à partir de commandes simples. Une version améliorée de ce shell est le Bourne-Again shell.

Principes généraux

Les buts poursuivis dans la conception du Bourne shell étaient[1] :

  • de pouvoir utiliser des shell scripts comme filtres,
  • des possibilités de programmation, y compris avec structures de contrôle et variables,
  • d'avoir le contrôle sur tous les descripteurs de fichiers en lecture/écriture,
  • d'avoir le contrôle sur signaux dans l'exécution des scripts,
  • de s'affranchir des limites sur la longueur des chaînes dans l'interprétation des shell scripts,
  • de rationaliser et généraliser les mécanismes d'adressage des chaînes de caractère (string quoting),
  • de disposer d'un mécanisme d’environnement, afin de récupérer le contexte au démarrage du script, et de pouvoir le transmettre aux process-fils sans avoir à recourir à des chemins explicites.

Caractéristiques de la version originale

  • Il est possible de lancer un script en tapant en ligne de commande le nom de fichier contenant le script
  • Le shell peut être utilisé en arrière-plan
  • Les commandes peuvent fonctionner en mode synchrone comme asynchrone
  • Prise en charge des redirections d'entrée/sortie et du tube, ou pipe
  • mise à disposition d'un jeu de commandes natives au shell
  • existence de structures de contrôle, de l'adressage indirect, et de la notion de fonction.
  • variables non-typées
  • variables à portée globale
  • bannissement de l’instruction de branchement inconditionnel goto, afin d’imposer une programmation structurée
  • mécanisme de substitution de commande avec syntaxe en back quotes : `command`.
  • redirection d'entrée de type document « ici-même » avec la syntaxe << pour substituer des arguments d'entrée dans un script.
  • boucles for ~ do ~ done, avec en particulier le métacaractère $* pour balayer les arguments.
  • structure de contrôle case ~ in ~ esac, pour faciliter le tri des arguments d'une commande.
  • Des possibilités d'extension pour le contrôle et les tests de comparaisons sur les flux d'entrée/sortie.

Le Bourne shell a été le premier à mettre en œuvre la convention de descripteur de fichier 2> pour adresser le flux du message d'erreur, dotant ainsi les scripts d'un mécanisme de gestion dynamique des exceptions.

Stephen Bourne a importé certains aspects du compilateur Algol 68C (sur lequel il avait travaillé à l'Université de Cambridge) dans son shell. Ce sont notamment des réemplois de portions du compilateur Algol 68 : "if ~ then ~ elif ~ else ~ fi", "case ~ in ~ esac" et les clauses "for ~ while ~ do ~ od" (avec done au lieu de od) pour la syntaxe commune du Bourne shell Unix. En outre (et bien que la version 7 du shell soit écrite en langage C), Bourne a utilisé quelques macros[2] pour donner à son code source un rendu « Algol 68 ». Ces macros (avec la commande finger apparue avec la version BSD 4.2 d'Unix) ont inspiré l’IOCCC – International Obfuscated C Code Contest[3].

Notes et références

  1. D'après Howard Dahdah (Techworld Australia), « The A-Z of Programming Languages: Bourne shell, or sh », Computerworld, no 5 mars,‎ (lire en ligne)
  2. Steve Bourne, « mac.h – Macros de S. Bourne pour structurer C au format « pseudo-Algol68 » », sur AT&T, (consulté le )
  3. Landon Curt Noll, Simon Cooper, Peter Seebach et Leonid A. Broukhis, « The IOCCC FAQ – Q/A: How did the IOCCC get started? », sur www.ioccc.org, (consulté le )

Voir aussi

Articles connexes

  • icône décorative Portail du logiciel