Je suis très nouveau sur Ubuntu. J'entends des gens dire "scripts Shell", "scripts bash".
Je me demande s'ils sont pareils? Ou sont-ils différents?
Bash (bash
name__) est l’un des nombreux shells Unix disponibles (mais les plus utilisés). Bash signifie "B ourne A gain SH ell" et constitue un remplacement/une amélioration du Bourne Shell d'origine. (sh
name__).
Les scripts shell sont des scripts en tous les shell , alors que les scripts Bash sont des scripts spécifiquement conçus pour 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.
Introduction
Les scripts shell et Bash
ne constituent pas la même chose, car il existe d'autres shells, tels que sh
name__, qui peuvent être utilisés pour exécuter un script; un script destiné à être exécuté par Bash
doit être étiqueté comme un script Bash
name__. Les termes sont souvent utilisés indifféremment car Bash
name__, avec ses fonctionnalités étendues par rapport à sh
name__, est celui qui est le plus couramment utilisé pour exécuter des scripts utilisateur dans de nombreuses distributions. Cependant, il existe d’autres shells tels que Korn (ksh)
, C Shell (csh)
et Z Shell (zsh)
, mais nous n’entrerons pas dans ceux-ci ici comme une discussion sur les noms sh
et bash
variable__ est tout à fait pertinente pour Ubuntu. Un excellent article d'IBM ici décrit plus en détail l'évolution des shells sous Linux et décrit bien l'architecture du shell et les différences entre les shells.
Script shell
Sh
était le shell Unix original développé par Stephen Bourne; Cependant, les systèmes Debian et Ubuntu considèrent dash
comme leur sh
shell (sh
est en fait un lien symbolique vers dash
name__). Dans Debian et Ubuntu, en raison de la rapidité de sh
name__, 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 Ubunt . Bash
représente le shell Bourne Again et a été développé plus tard par Brian Fox et a beaucoup étendu le nom sh
original. Le développement de Bash
par Fox et d'autres personnes constituait une partie importante du projet GNU. Voir this grande discussion de l'historique de Bash
pour plus d'informations.
Il est important de noter que sh
et Bash
name__, tels qu'ils sont utilisés dans Ubuntu et d'autres distributions, sont conformes à POSIX
name__, ce qui signifie qu'ils souscrivent à un certain nombre de normes relatives à la manière 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 conservé dans ces paramètres POSIX
name__, 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 sous la forme de scripts bash
name__, et ont #!/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 à la interprète est /bin/sh
ou /bin/bash
. Les scripts de shell peuvent également être appelés sur la ligne de commande avec sh
ou bash
name__.
Cependant, il est important de noter que les résultats peuvent différer en fonction de l'interpréteur appelé, car toutes les commandes bash
ne fonctionneront pas avec sh
name__, alors que la plupart Les commandes sh
fonctionneront dans bash
name__. En général, la plupart des utilisateurs voudront utiliser /bin/bash
pour leurs scripts afin de pouvoir tirer parti des fonctionnalités étendues. Les scripts système peuvent être exécutés avec /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 wiki , Bash hackers de Greg et le livre récent de Steve Parker sur les scripts Shell, qui se concentre principalement sur Bash
et publié par O'Reilly. Une bonne introduction est également entreprise par le Guide du débutant Bash .
Plusieurs shells sont disponibles pour Ubuntu, tels que 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 du script bash
, il utilise un shell, mais lorsque quelqu'un parle du script shell, il n'utilise pas lui-même bash
. Mais comme bash
est couramment utilisé dans les scripts pour Ubuntu, il l’est habituellement. De plus, les différentes coquilles sont identiques à bien des égards, donc cela n’a généralement aucune importance.
Un script shell serait défini comme un script orienté vers la portabilité pouvant être exécuté. par un shell système 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 le fondement le plus courant 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 shells pour un usage non interactif (c'est-à-dire pour exécuter des scripts système ou des scripts utilisant #! /bin/sh
Shebang) qui, en plus d'implémenter les commandes et la syntaxe POSIX, possèdent leurs propres extensions ou peuvent éventuellement être supprimés de certains moins utiles fonctions 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, généralement complet bash . 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 se trouvent 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 à pointer 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
est un lien symbolique pointant vers bin/dash
, qui est un exécutable d’un shell dash . Cela rend dash le système Shell, qui est estimé à être 4x plus rapide et est environ 1/10 taille que le bash plus fonctionnel. source: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-Shell-faster-than-bash
Le terminal interactif Debian/Ubuntu est par défaut, comme dans beaucoup d'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, ne la placez pas dans un script
#! /bin/sh
.
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:
$ 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: