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?
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?
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.
/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 tels sh
qu'ils peuvent être utilisés pour exécuter un script; un script destiné à être exécuté par Bash
doit être qualifié de Bash
script. 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 sh
et bash
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èrent dash
leur sh
shell ( sh
est 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 . Bash
repré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 Bash
pour plus d'informations.
Il est important de noter que les deux sh
et Bash
, comme utilisés dans Ubuntu et d'autres distributions, sont POSIX
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 ces POSIX
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 que bash
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 avec sh
ou 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 bash
commandes ne fonctionneront pas sh
, alors que la plupart des sh
commandes fonctionneront bash
. 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 sur Bash
et est publié par O'Reilly. Une bonne introduction est également entreprise par le Guide du débutant Bash .
Il y a plusieurs coquilles disponibles pour Ubuntu, comme bash
, zsh
, ksh
, tcsh
et 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 bash
script, il utilise un shell, mais lorsque quelqu'un parle de script, il n'utilise pas en soi bash
. Mais comme il bash
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.
$ 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:
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
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 vers bin/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-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
Si une commande ou une option n'est pas définie par POSIX, ne la placez pas dans un
#! /bin/sh
script.
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: