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.
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 .
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.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4Mar2911:53/bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768Mar2911:53/bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024Apr308: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».
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.
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.
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:
Réponses:
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.
la source
/bin/sh
lien symbolique/bin/dash
cré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/sh
c'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/sh
shell Bourne compatible avec POSIX.introduction
Les scripts shell et les
Bash
scripts ne sont pas la même chose, car il existe d'autres shells telssh
qu'ils peuvent être utilisés pour exécuter un script; un script destiné à être exécuté parBash
doit être qualifié deBash
script. Les termes sont souvent utilisés de manière interchangeable parce queBash
, 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 leKorn (ksh)
,C shell (csh)
etZ shell (zsh)
, mais nous ne rentrerons pas dans les ici une discussionsh
etbash
est 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èrentdash
leursh
shell (sh
est en fait un lien symboliquedash
). Dans Debian et Ubuntu, en raison de la vitesse desh
, 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 .Bash
représente le Bourne Again SHell et a été développé plus tard par Brian Fox et a beaucoup étendu l'originalsh
. Le développement de Fox et d’autresBash
était une partie importante du projet GNU. Voir cette grande discussion de l'histoire deBash
pour plus d'informations.Il est important de noter que les deux
sh
etBash
, comme utilisés dans Ubuntu et d'autres distributions, sontPOSIX
conformes, 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 cesPOSIX
paramè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 quebash
scripts, et se trouvent#!/bin/bash
en 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/sh
ou/bin/bash
. Les scripts shell peuvent également être appelés sur la ligne de commande avecsh
oubash
.Cependant, il est important de noter que les résultats peuvent être différents en fonction de l'interpréteur appelé, car toutes les
bash
commandes ne fonctionneront passh
, alors que la plupart dessh
commandes fonctionnerontbash
. En général, la plupart des utilisateurs souhaiteront utiliser/bin/bash
leurs scripts pour pouvoir tirer parti des fonctionnalités étendues. Les scripts système peuvent être exécutés/bin/sh
si 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 surBash
et est publié par O'Reilly. Une bonne introduction est également entreprise par le Guide du débutant Bash .la source
Il y a plusieurs coquilles disponibles pour Ubuntu, comme
bash
,zsh
,ksh
,tcsh
etcsh
.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
bash
script, il utilise un shell, mais lorsque quelqu'un parle de script, il n'utilise pas en soibash
. Mais comme ilbash
est 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.la source
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:
la source
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/sh
shebang) 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/sh
un lien symbolique pointant versbin/dash
un 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-bashTerminal 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:
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
la source