Le script bash est-il identique au script shell?


58

Je suis très nouveau sur Ubuntu. J'entends des gens dire "script shell", "script bash".

Je me demande s'ils sont pareils? Ou sont-ils différents?


Il y a une réponse utile à SO
M. Pei

Réponses:


55

Bash ( bash) est l’un des nombreux shells Unix disponibles (mais les plus couramment utilisés). Bash signifie " B Ourne Un gain de SH ell" et est un remplacement / amélioration de la Bourne shell original ( sh).

Les scripts de shell sont des scripts dans n'importe quel shell, alors que les scripts de Bash sont des scripts spécifiques à Bash. En pratique, cependant, "script shell" et "script bash" sont souvent utilisés de manière interchangeable, à moins que le shell en question ne soit pas Bash.

EDIT: En réalité, le shell de script par défaut dans Ubuntu est dash, tandis que le shell interactif par défaut (ce que vous obtenez si vous extrayez un terminal) est Bash. Néanmoins, les deux termes sont encore essentiellement interchangeables.


1
Qu'est-ce qui définit dash comme shell de script par défaut?
wjandrea

1
@wjandrea Le fait que le /bin/shlien symbolique /bin/dashcrée le shell système par défaut , mais ce n'est pas le shell de script par défaut , c'est-à-dire qu'il n'y a aucune règle écrite que vous devez absolument utiliser /bin/sh. Quand on l'utilise, /bin/shc'est principalement pour des raisons de portabilité, quand on s'attend à ce que votre script soit utilisé sur plusieurs plates-formes de système d'exploitation de type Unix, dont la plupart ont un /bin/shshell Bourne compatible avec POSIX.
Sergiy Kolodyazhnyy

29

introduction

Les scripts shell et les Bashscripts ne sont pas la même chose, car il existe d'autres shells tels shqu'ils peuvent être utilisés pour exécuter un script; un script destiné à être exécuté par Bashdoit être qualifié de Bashscript. Les termes sont souvent utilisés de manière interchangeable parce que Bash, avec ses fonctionnalités étendues par rapport à sh, est celui qui est le plus couramment utilisé pour exécuter des scripts utilisateur dans de nombreuses distributions. Cependant, il y a d' autres coquilles, comme le Korn (ksh), C shell (csh)et Z shell (zsh), mais nous ne rentrerons pas dans les ici une discussion shet bashest le plus pertinent pour Ubuntu. Un grand article IBM ici donne plus de détails sur l'évolution des coquilles sous Linux et décrit bien l'architecture coquille et la façon dont les coquilles diffèrent.

Shell Scripting

Shétait le shell Unix original développé par Stephen Bourne; Cependant, les systèmes basés sur Debian et Ubuntu considèrent dashleur shshell ( shest en fait un lien symbolique 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 de clé au démarrage; pour plus de détails, voir le wiki Ubuntu . Bashreprésente le Bourne Again SHell et a été développé plus tard par Brian Fox et a beaucoup étendu l'original sh. Le développement de Fox et d’autres Bashétait une partie importante du projet GNU. Voir cette grande discussion de l'histoire de Bashpour plus d'informations.

Il est important de noter que les deux shet Bash, comme utilisés dans Ubuntu et d'autres distributions, sont POSIXconformes, ce qui signifie qu'ils souscrivent à un certain nombre de normes sur la façon dont les commandes sont exécutées 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 POSIXparamètres, ce qui est particulièrement important pour les développeurs. Pour plus d'informations sur les normes, voir la documentation officielle .

Les scripts de shell ont souvent le suffixe .sh, même s'ils sont destinés à être exécutés en tant que bashscripts, et se trouvent #!/bin/bashen haut du script. Peu importe que le script soit appelé script.sh ou my.script , l’important est de savoir si l’appel de l’interprète est /bin/shou /bin/bash. Les scripts shell peuvent également être appelés sur la ligne de commande avec shou bash.

Cependant, il est important de noter que les résultats peuvent être différents en fonction de l'interpréteur appelé, car toutes les bashcommandes ne fonctionneront pas sh, alors que la plupart des shcommandes fonctionneront bash. En général, la plupart des utilisateurs souhaiteront utiliser /bin/bashleurs scripts pour pouvoir tirer parti des fonctionnalités étendues. Les scripts système peuvent être exécutés /bin/shsi nécessaire.

Ressources pour la création de scripts Bash Shell

Il est parfois difficile de trouver des ressources utiles en ligne qui respectent les bonnes pratiques et donnent des conseils vous permettant de créer des scripts utiles. Après man bash, certaines des ressources les plus importantes sont le wiki de Greg , les hackers Bash et le livre récent de Steve Parker sur les scripts Shell, qui se concentre principalement sur Bashet est publié par O'Reilly. Une bonne introduction est également entreprise par le Guide du débutant Bash .


2
Cette réponse est en fait supérieure à la mienne (la réponse acceptée), la mienne est arrivée une semaine avant celle-ci.
Hilton Shumway

4

Il y a plusieurs coquilles disponibles pour Ubuntu, comme bash, zsh, ksh, tcshet csh.

Donc, chaque fois que quelqu'un dit shell , il en parle. Cependant, ces coquilles diffèrent un peu les unes des autres. Ainsi, lorsque quelqu'un parle de bashscript, il utilise un shell, mais lorsque quelqu'un parle de script, il n'utilise pas en soi bash. Mais comme il bashest couramment utilisé dans les scripts pour Ubuntu, il l’est généralement. De plus, les différentes coquilles sont les mêmes à bien des égards, donc cela n’a généralement aucune importance.


2
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr  3 08:58 /bin/bash*

Cela montre que 'sh' est un lien symbolique vers 'dash', et que / bin / bash, qui est le shell interactif par défaut sous Ubuntu, est un exécutable presque 9 fois plus grand que / bin / sh.

En effet, «homme sh» (1590 lignes) vs «homme bash» (5459 lignes) révèle que bash est un grand sur-ensemble du traditionnel «sh».

Lire la suite ici:


2

Le script shell serait défini comme un script orienté portabilité pouvant être exécuté par un shell système composé de systèmes d'exploitation compatibles POSIX. La syntaxe serait identique ou similaire à la syntaxe du langage de script shell définie par le standard POSIX. C’est la norme pour la plupart des systèmes d’exploitation compatibles POSIX, tels que Linux / Unix / * BSD, etc. POSIX est la base la plus courante en matière de compatibilité entre systèmes d’exploitation.

Différents systèmes d'exploitation des systèmes susmentionnés implémentent différents interpréteurs pour une utilisation non interactive (c'est-à-dire pour exécuter des scripts système ou des scripts utilisant #! /bin/shshebang) qui, outre la mise en œuvre des commandes et de la syntaxe POSIX, possèdent leurs propres extensions ou peuvent éventuellement être supprimés de fonctionnalités moins utiles. pour des raisons de performances, mais la solution POSIX permet un très haut niveau de portabilité des scripts conçus pour différents systèmes Oss compatibles POSIX.

La plupart des systèmes d’exploitation mentionnés ci-dessus ont un shell interactif distinct qui est généralement une bash complète . Bash est en grande partie compatible avec POSIX, mais dispose également d'un grand pool de commandes supplémentaires et prend en charge une syntaxe différente. Démarrer Bash avec l'option de ligne de commande --posix ou exécuter 'set -o posix' alors que Bash est en cours d'exécution permettra à Bash de se conformer davantage au standard POSIX en modifiant le comportement de celui-ci pour qu'il corresponde à celui spécifié par POSIX dans les zones où la valeur par défaut de Bash est utilisée. 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 shell sur les systèmes d'exploitation 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, plus précisément, nous savons clairement quel chemin mettre dans l'expression shebang un exécutable shell approprié pour exécuter le script. Les systèmes de fichiers Unix / Linux / * BSD ne prennent pas en charge les extensions intrinsèquement. Par conséquent, les extensions de fichier servent uniquement de conseil supplémentaire ou d'indexation.

Sur Debian / Ubuntu en particulier, bin/shun lien symbolique pointant vers bin/dashun exécutable d’un shell dash . Cela rend dash le shell système, qui est estimé à être 4x plus rapide et une taille ~ 1/10 que le bash plus fonctionnel. source: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash

Terminal interactif Debian / Ubuntu est par défaut, comme dans de nombreux autres systèmes d' exploitation Unix, bash, dont le chemin est aussi uniforme: /bin/bash.

POSIX.1-2017 standard: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html

La règle générale serait:

Si une commande ou une option n'est pas définie par POSIX, ne la placez pas dans un #! /bin/shscript.

Convertissez votre script ou recherchez les erreurs

Pour convertir votre script de bash en formulaire POSIX, vous pouvez vérifier automatiquement la présence de bugs dans votre script shell ou voir les modifications à apporter à votre script bash pour le rendre compatible POSIX:

https://www.shellcheck.net/

http://mywiki.wooledge.org/Bashism


1
Très bonne réponse, +1. Bienvenue sur AskUbuntu!
Sergiy Kolodyazhnyy

1
En ce qui concerne Dash en tant que / bin / sh sur ubuntu, il existe un article que vous voudrez peut-être également citer. Et il y a aussi askubuntu.com/q/976485/295286
Sergiy Kolodyazhnyy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.