Les différents types de shell#
Bourne Shell (sh)#
- Un des premiers interpréteurs de commandes pour les systèmes d'exploitation Unix.
- Il a été développé par Stephen Bourne (en ~1970)
- Largement utilisé jusqu'à ce qu'il soit remplacé par des interpréteurs de commandes plus avancés
- ex: C shell (csh), Bourne-Again shell (bash), etc.
C-shell (csh)#
- Un shell Unix qui a été développé à la fin des années 1970.
- Créé comme une alternative au shell Unix original, le Bourne shell (sh)
- Conçu pour fournir une interface de ligne de commande plus interactive et plus conviviale.
- Principalement utilisé dans la branche BSD d'Unix (ex : FreeBSD, OpenBSD, et NetBSD).
- Caractéristiques
- Edition interactive de la ligne de commande (éditer et modifier ses commandes avant qu'elles ne soient exécutées)
TENEX C-shell (tcsh)#
- Version améliorée du csh qui a été développé au milieu des années 80.
- Comprend des fonctionnalités supplémentaires et des améliorations par rapport à csh,
- Meilleure édition de la ligne de commande, manipulation étendue de l'historique et contrôle des tâches.
- Complétion de la ligne de commande, correction automatique de l'orthographe et liste automatique des complétions possibles
- Encore utilisé par de nombreux utilisateurs d'Unix aujourd'hui
Bourne-Again Shell (bash)#
- Interpréteur de commandes compatible avec sh,
- Développé comme amélioration du Bourne shell par Brian Fox pour le projet GNU (en 1989),
- Devient le shell par défaut pour la plupart des distributions Linux,
- Est rapidement porté vers d'autres systèmes d'exploitation tels que macOS.
- Fonctionnalités en plus (par rapport à sh)
- Historique des commandes, complétion automatique de commande,
- Structures de contrôle de flux plus avancées,
- Tableaux, typage de variables, variables locales,
- Des fonctions avec une sémantique plus riches,
Korn shell (ksh)#
- Interpréteur de commandes Unix/Linux
- Conçu pour être plus riche que le Bourne Shell (sh) et le Bourne Again Shell (bash).
- Systèmes de shell parmis les plus populaires notamment sur AIX (IBM)
- Fonctionnalités supplémentaires
- Historique des commandes, complétion automatique de commande,
- Structures de contrôle de flux plus avancées,
- Tableaux, typage de variables, variables locales, variables complexes
- Des fonctions avec une sémantique plus riches,
- Gestion avancée des processus, techniques de débogage avancées.
Z Shell (zsh)#
- Interpréteur de commandes Unix/Linux.
- conçu par Paul Falstad en 1990.
- Shell de choix pour de nombreux utilisateurs
- en raison de ses fonctionnalités avancées et de sa personnalisation flexible.
- en raison de sa licence permissive (MIT)
- Fonctionnalités supplémentaires par rapport à Bash & Ksh
- Meilleure complétion des commandes
- Personnalisation plus poussée de l'interface utilisateur,
- Options d'édition de commandes, la substitution de commandes,
- L'expansion de noms de fichiers,
- Configuration plus sûre, les fonctionnalités dangereuses sont désactivées par défaut,
- Mécanisme de rappel de commandes puissant, qui permet aux utilisateurs de modifier et de réutiliser facilement les commandes précédemment exécutées.
Autres shells notables#
- Ash (Almquist shell) - used by Busybox.
- Dash (Debian Almquist shell) - used by Debian
- PowerShell - used by Microsoft Windows
- Fish (Friendly Interactive SHell)
- etc.
POSIX#
La norme POSIX (Portable Operating System Interface) définit l'interface de programmation pour les applications shell sous les systèmes d'exploitation UNIX et UNIX-like.
- POSIX spécifie les commandes, les variables d'environnement, les fichiers et les flux de données, ainsi que les règles de syntaxe pour les commandes et les scripts shell.
- POSIX fournit une base commune pour les commandes et les scripts shell.
- POSIX permet la portabilité des scripts entre différents systèmes d'exploitation (sans modifications)
- POSIX définit des fonctionnalités telles que les expressions régulières et le fonctionnement des flux(pipes, etc.)
- POSIX a été adoptée comme norme ISO/IEC 9945 dans les années 1990.
Bashismes, fonctionnalités avancés et compatibilité#
Presque tous les shells modernes prennent en charge des extensions de syntaxe qui ne sont pas compatibles ni avec le Bourne shell d'origine, ni avec POSIX, ni entre eux.
Il faut donc faire extrèmement attention à ce que vous trouvez comme "solutions" en ligne (ou dans les livres)
L'utilisation de la norme POSIX pour le shell est recommandée pour assurer la portabilité et la compatibilité de vos scripts entre différents systèmes d'exploitation.
Note: Pour repérer facilement et ainsi éviter les bashismes et incompatibilités, vous pouvez utiliser l'outil shellcheck
.