81 votes

Est-ce que le bash scripting est la même chose que le shell scripting?

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?

71voto

Hilton Shumway Points 826

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.

36voto

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.

4voto

fromnaboo Points 3086

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.

4voto

Ola Points 528

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

Spécificateur Shebang et chemins uniformes pour les exécutables de shell sur les OS de type Unix

[

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

La règle générale serait la suivante:

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.

Convertir votre script ou vérifier les erreurs

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 :

https://www.shellcheck.net/

http://mywiki.wooledge.org/Bashism

2voto

arielf Points 2623

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:

SistemesEz.com

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.

Powered by:

X