Il existe deux environnements de programmation disponibles sur tous les systèmes d'exploitation de type Unix, Turing-complete et capables d'appeler d'autres programmes: awk et sh , la famille de shell Bourne / POSIX. AWK est orienté vers le traitement de texte (il complète des utilitaires plus spécialisés), tandis que sh est orienté vers un langage de collage pour assembler des programmes. Sh est le langage de script universel sur Linux et dans le monde Unix.
La norme POSIX définit les fonctionnalités obligatoires de sh lui-même et des utilitaires associés. La plupart des systèmes de type Unix sont conformes à POSIX 1003.1-2004 (alias Single Unix v3, alias Open Group Base Specification issue 6); la dernière version de cette norme est POSIX 1003.1-2008 (alias Single Unix v4, alias Open Group Base Specification Issue 7).
Chaque système Linux et Unix ou Unix-like a un shell de style Bourne sur le chemin /bin/sh
, et tout système non antique a un shell conforme POSIX (sauf le bogue occasionnel). Chaque système moderne de type Unix (y compris Linux) prend en charge les shebangs , il exécute donc automatiquement les scripts /bin/sh
si la première ligne l'est #!/bin/sh
. Il existe des systèmes POSIX qui sh
sont situés à un autre endroit (généralement des couches d'émulation sur des systèmes d'exploitation que vous ne penseriez pas vraiment être de type Unix).
Les systèmes Linux embarqués peuvent avoir un système BusyBox allégé qui n'implémente pas toutes les fonctionnalités POSIX. BusyBox dispose d'un grand nombre d'options au moment de la compilation pour s'adapter aux systèmes à faible encombrement, il est donc difficile de savoir à quoi s'attendre à l'avance, vous devez adapter vos scripts à un appareil particulier. BusyBox est l'implémentation à faible encombrement la plus courante des utilitaires sh et assortis; un autre environnement que vous pourriez rencontrer est l'environnement shell extrêmement réduit d'Android (les versions ultérieures sont moins anémiques).
Les systèmes Linux non intégrés ont presque toujours un tiret ou un bash as /bin/sh
. Dash est un petit shell rapide qui n'implémente guère plus que les fonctionnalités POSIX. Bash est un shell plus grand avec plus de fonctionnalités.
Les systèmes Linux non intégrés ont presque toujours Bash installé en tant que /bin/bash
. Par conséquent, pour la portabilité sur les systèmes Linux non intégrés, vous pouvez supposer que bash est disponible. Parmi les fonctionnalités supplémentaires utiles de bash, il y a les tableaux, la possibilité de gérer facilement les fichiers à points, la pipestatus
variable pour obtenir le statut de retour de toutes les commandes dans un pipeline, des opérateurs de comparaison supplémentaires pour les temps de fichier et (dans les versions récentes) la correspondance des expressions régulières .
L'une des caractéristiques de la programmation shell est que vous n'utilisez pas seulement le sh
programme, vous utilisez également un certain nombre d' utilitaires . La plupart des utilitaires de manipulation de fichiers et de traitement de texte sous Linux sont les coreutils GNU (sur les systèmes embarqués, ils proviennent généralement de BusyBox).
Si vous avez besoin de portabilité au-delà de Linux, votre meilleur pari est de vous en tenir à POSIX. D'autres versions d'Unix peuvent ne pas avoir bash installé (bash fait partie de l'installation standard sur OSX, mais un paquet facultatif sur * BSD et la plupart des unités commerciales). Presque toutes les variantes Unix autres que Linux et OSX (c'est-à-dire * BSD et les unités commerciales) ont une version du shell Korn , au moins pdksh . De nombreuses extensions pratiques de bash proviennent de ksh, il peut donc être utile d'écrire des scripts pouvant s'exécuter sous les deux, mais détecter où bash ou ksh se trouve sur un système inconnu peut être un peu pénible.
La coquille ne peut pas tout faire. Si vous avez besoin d'un langage plus sophistiqué, les deux choix les plus courants sont Perl et Python (tout le reste est loin derrière en tant que langage de script Unix). Perl est le langage de script traditionnel, et peu de systèmes Linux non intégrés en manquent, mais Python gagne du terrain (stimulé en partie en étant le langage de script recommandé pour Ubuntu). Dans le monde non Linux, Perl fait partie de l'installation de base sur OSX et OpenBSD; il est facultatif mais très couramment installé sur FreeBSD, et facultatif mais souvent installé sur NetBSD.
sh
.