Je suis très nouveau sur Ubuntu. J'entends souvent les gens dire "script shell", "script bash".
Je me demande s'ils sont pareils? Ou s'ils sont différents?
Je suis très nouveau sur Ubuntu. J'entends souvent les gens dire "script shell", "script bash".
Je me demande s'ils sont pareils? Ou s'ils sont différents?
Bash (bash
) est l'un des nombreux shells Unix disponibles (mais le plus couramment utilisé). Bash signifie "Bourne Again SHell" et est un remplacement/amélioration du shell Bourne original (sh
).
Le scripting shell consiste à écrire des scripts dans n'importe quel shell, tandis que le scripting Bash consiste à écrire des scripts spécifiquement pour Bash. En pratique, cependant, "script shell" et "script bash" sont souvent utilisés de manière interchangeable, sauf si le shell en question n'est pas Bash.
ÉDIT : En réalité, le shell de scripting par défaut dans Ubuntu est dash, tandis que le shell interactif par défaut (ce que vous obtenez si vous ouvrez un terminal) est Bash. Néanmoins, les deux termes sont encore largement interchangeables.
Introduction
Le script Shell et le script Bash
ne sont pas la même chose, car d'autres shells existent comme sh
qui peuvent être utilisés pour exécuter un script ; un script destiné à être exécuté par Bash
devrait être étiqueté comme un script Bash
. Les termes sont souvent utilisés de manière interchangeable car Bash
, avec ses fonctionnalités étendues par rapport à sh
, est celui le plus couramment utilisé pour exécuter des scripts utilisateur dans de nombreuses distributions. Cependant, il existe d'autres shells tels que le Korn (ksh)
, le C shell (csh)
et le Z shell (zsh)
, mais nous n'entrerons pas dans les détails ici car une discussion sur sh
et bash
est plus pertinente pour Ubuntu. Un excellent article d'IBM ici donne plus de détails sur l'évolution des shells dans Linux et décrit bien l'architecture des shells et comment ils diffèrent.
Script Shell
Sh
était le shell Unix original développé par Stephen Bourne ; cependant, les systèmes basés sur Debian et Ubuntu considèrent dash
comme leur shell sh
(sh
est en fait un lien symbolique vers dash
). Dans Debian et Ubuntu, en raison de la vitesse de sh
, il est plus souvent utilisé pour les procédures système critiques et pour l'exécution de scripts clés au démarrage ; pour plus de détails, consultez le wiki Ubuntu. Bash
signifie Bourne Again SHell et a été développé plus tard par Brian Fox et a beaucoup étendu le sh
original. Le développement de Bash
par Fox et d'autres était une partie importante du projet GNU. Consultez cette excellente discussion sur l'histoire de Bash
pour plus d'informations.
Il est important de noter que tant sh
que Bash
, utilisés dans Ubuntu et d'autres distributions, sont conformes à POSIX
, ce qui signifie qu'ils respectent un certain nombre de normes concernant l'exécution des commandes dans le Shell. Cela garantit que les résultats des scripts utilisés dans le système d'exploitation peuvent être prédits de manière fiable, et que le comportement du shell peut être maintenu dans ces paramètres POSIX
, ce qui est particulièrement important pour les développeurs. Pour plus d'informations sur les normes, consultez la documentation officielle.
Les scripts shell ont souvent pour suffixe .sh
, même s'ils sont destinés à être exécutés en tant que scripts bash
, et ont #!/bin/bash
en haut du script. En réalité, il n'importe pas que le script s'appelle script.sh ou mon.script, ce qui importe est si l'appel à l'interprète est /bin/sh
ou /bin/bash
. Les scripts shell peuvent également être appelés en ligne de commande avec sh
ou bash
.
Cependant, il est important de noter que les résultats peuvent être différents en fonction de l'interprète appelé, car toutes les commandes bash
ne fonctionneront pas dans sh
, alors que la plupart des commandes sh
fonctionneront dans bash
. En général, la plupart des utilisateurs voudront utiliser /bin/bash
pour leurs scripts afin de profiter de l'ensemble de fonctionnalités étendu ; les scripts système peuvent être exécutés avec /bin/sh
s'ils en ont besoin.
Ressources pour le script Shell Bash
Il est parfois difficile de trouver des ressources en ligne utiles qui suivent de bonnes pratiques et qui donnent des conseils pour vous permettre de créer des scripts utiles. Après man bash
, certaines des ressources les plus importantes sont le wiki de Greg, les hackers de Bash et le livre récent de Steve Parker sur le script Shell qui se concentre principalement sur Bash
et qui est publié par O'Reilly. Une bonne introduction est également faite par le Guide du débutant en Bash.
Il existe plusieurs shells disponibles pour Ubuntu, comme bash
, zsh
, ksh
, tcsh
et csh
.
Donc à chaque fois que quelqu'un parle de shell, il parle de l'un de ceux-ci. Cependant, ces shells diffèrent un peu les uns des autres. Ainsi, lorsque quelqu'un parle de scripts bash
, il utilise un shell, mais lorsque quelqu'un parle de scripts shell, il n'utilise pas nécessairement bash
. Mais comme bash
est communément utilisé dans les scripts pour Ubuntu, c'est généralement le cas. De plus, les différents shells sont les mêmes sur de nombreux aspects, donc cela n'a généralement pas d'importance.
Script shell serait défini comme un script orienté vers la portabilité qui peut être exécuté par un shell système des OS compatibles POSIX. La syntaxe serait identique ou similaire à la syntaxe du langage de script shell définie par la norme POSIX. C'est la norme pour la plupart des OS compatibles POSIX, comme Linux/Unix/*BSD, etc. POSIX est le terrain le plus commun pour la compatibilité entre les systèmes d'exploitation.
Différents OS de ceux mentionnés implémentent différents shells pour une utilisation non interactive (c'est-à-dire pour exécuter des scripts système ou des scripts qui utilisent le shebang #! /bin/sh
) qui, en plus de mettre en œuvre des commandes et une syntaxe POSIX, ont leurs propres extensions ou peuvent éventuellement être débarrassés de certaines fonctionnalités moins utiles pour des raisons de performance, mais le terrain POSIX permet un très haut niveau de portabilité des scripts conçus pour différents OS compatibles POSIX.
La plupart des OS mentionnés ci-dessus disposent d'un shell interactif séparé qui est généralement entièrement bash. Bash est en grande partie compatible POSIX, mais dispose également d'un important ensemble de commandes supplémentaires et prend en charge une syntaxe différente. Démarrer Bash avec l'option en ligne de commande --posix ou exécuter ‘set -o posix’ pendant que Bash est en cours d'exécution fera en sorte que Bash se conforme plus strictement à la norme POSIX en modifiant le comportement pour correspondre à celui spécifié par POSIX dans les domaines où la valeur par défaut de Bash diffère, voir: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
[
Grâce aux règles uniformes sur le placement des exécutables pour les shells (ils sont généralement dans le répertoire '/bin/'), nous pouvons avoir des règles uniformes pour la création de scripts shell, et plus précisément, nous savons quel chemin mettre dans l'expression shebang pour pointer vers un exécutable de shell approprié pour exécuter le script. Les systèmes de fichiers Unix/Linux/*BSD ne prennent pas en charge les extensions intrinsèquement, donc les extensions de fichiers ne servent que comme indication supplémentaire, ou à des fins d'indexation.
](https://en.wikipedia.org/wiki/Shebang_(Unix))
Sur Debian/Ubuntu spécifiquement, bin/sh
est un lien symbolique pointant vers bin/dash
qui est un exécutable d'un shell dash. Cela fait de dash le shell système, estimé être 4 fois plus rapide et plus petit que le bash plus fonctionnel. source: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
Le terminal interactif par défaut de Debian/Ubuntu est, comme dans de nombreux autres systèmes d'exploitation de type Unix, bash, pour lequel le chemin est également uniforme: /bin/bash
.
Norme POSIX.1-2017 : http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
Si une commande ou une option n'est pas définie par POSIX, alors ne la mettez pas dans un script
#! /bin/sh
en premier lieu.
Pour convertir votre script de bash en une forme POSIX, vous voudrez peut-être vérifier automatiquement les erreurs dans votre script shell ou voir quels changements vous devez apporter à votre script bash pour le rendre compatible POSIX :
Cela montre que 'sh' est un lien symbolique vers 'dash', et que /bin/bash, qui est l'interpréteur de commandes interactif par défaut sur Ubuntu, est un exécutable qui est presque 9 fois plus grand que /bin/sh.
En effet, 'man sh' (1590 lignes) contre 'man bash' (5459 lignes) révèle que bash est un grand sur-ensemble du traditionnel 'sh'.
En savoir plus ici:
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.