81 votes

Le script bash est-il identique au script Shell ?

Je suis très novice en matière d'Ubuntu. J'entends les gens dire "Shell scripting", "bash scripting".

Je me demande si ce sont les mêmes ? Ou bien 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 est l'abréviation de " B ourne A gain SH ell", et est un remplacement/amélioration du Bourne Shell original ( sh ).

Shell sont des scripts en tout Shell, alors que le scripting Bash est un scripting spécifique pour Bash. En pratique, cependant, "Shell Shell" et "bash Shell" sont souvent utilisés de manière interchangeable, à moins que le Shell en question ne soit pas Bash.

EDIT : En fait, 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 tirez sur un terminal) est Bash. Néanmoins, les deux termes sont encore largement interchangeables.

36voto

Introduction

Shell et le scripting. Bash ne sont pas la même chose, car il existe d'autres shells tels que sh qui peut être utilisé pour exécuter un script ; un script destiné à être exécuté par des Bash doit être étiqueté comme un Bash script. Ces termes sont souvent utilisés de manière interchangeable car Bash avec ses fonctionnalités étendues par rapport à sh est celui qui est le plus couramment utilisé pour exécuter les scripts de l'utilisateur dans de nombreuses distributions. Cependant, il existe d'autres shells tels que le shell Korn (ksh) , C shell (csh) et le Z shell (zsh) mais nous n'y reviendrons pas ici, car il s'agit d'une discussion sur l'avenir de l'Europe. sh y bash est le plus pertinent pour Ubuntu. Un excellent article d'IBM ici entre dans le détail de l'évolution des shells dans Linux et décrit bien l'architecture Shell et comment les shells 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ère dash comme leur sh Shell ( sh est en fait un lien symbolique vers dash ). Dans Debian et Ubuntu, à cause de la rapidité de sh il est plus souvent utilisé pour les procédures critiques du système et pour l'exécution des scripts clés au démarrage ; pour plus de détails, voir le wiki d'Ubuntu . Bash représente le Bourne Encore Shell et a été développé plus tard par Brian Fox et beaucoup étendu l'original sh . Le développement par Fox et d'autres de Bash était une partie importante du projet GNU. Voir こん grande discussion sur l'histoire de Bash pour plus d'informations.

Il est important de noter que les deux sh y Bash tels qu'utilisés dans Ubuntu et d'autres distributions, sont les suivants POSIX compliant, 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 permet de s'assurer que les résultats des Shell utilisés dans l'OS peuvent être prédits de manière fiable, et que le comportement du Shell peut être maintenu dans ces limites. POSIX les paramètres, car cela est particulièrement important pour les développeurs. Pour plus d'informations sur les normes, voir la documentation officielle .

Souvent, les Shell Shell ont le suffixe .sh même s'ils sont destinés à être exécutés en tant que bash scripts, et ont #!/bin/bash en haut du script. En fait, il importe peu que le script soit appelé script.sh o mon.script ce qui compte, c'est de savoir si l'appel à l'interpréteur est /bin/sh o /bin/bash . Shell Shell peuvent également être appelés sur la ligne de commande avec soit sh o bash .

Cependant, il est important Il convient de noter que les résultats peuvent être différents selon l'interprète appelé, car tous les interpréteurs ne sont pas identiques. bash fonctionneront dans sh alors que la plupart des sh fonctionneront dans bash . En général, la plupart des utilisateurs voudront utiliser /bin/bash pour leurs scripts afin qu'ils puissent profiter de l'ensemble des fonctionnalités étendues ; les scripts du système peuvent être exécutés à l'aide de l'option /bin/sh si cela est nécessaire.

Ressources pour l'écriture de scripts Bash Shell.

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

4voto

fromnaboo Points 3086

Il y a plusieurs shells disponibles pour Ubuntu, comme bash , zsh , ksh , tcsh y csh .

Donc à chaque fois que quelqu'un dit Shell il parle de l'un d'entre eux. Cependant, ces coquilles diffèrent un peu les unes des autres. Ainsi, lorsque quelqu'un parle de bash scripting, il utilise un Shell, mais quand quelqu'un parle de Shell scripting, il n'utilise pas en tant que tel bash . Mais comme bash est couramment utilisé dans les scripts pour Ubuntu, il l'est généralement. De plus, les différents shells sont les mêmes sous de nombreux aspects, donc cela n'a généralement pas d'importance.

4voto

Ola Points 528

Shell Shell serait défini comme un orienté vers la portabilité script qui peut être exécuté par un système Shell des systèmes d'exploitation compatibles avec POSIX. La syntaxe serait identique ou similaire à la syntaxe du langage de script Shell définie par la norme POSIX. C'est le standard de 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.

Les différents systèmes d'exploitation mentionnés ci-dessus mettent en œuvre différents shells pour l'utilisation non interactive (c'est-à-dire pour exécuter les scripts du système ou les scripts qui utilisent le système d'exploitation). #! /bin/sh shebang) qui, en plus d'implémenter les commandes et la syntaxe POSIX, ont leurs propres extensions ou peuvent éventuellement être dépouillés de certaines fonctionnalités moins utiles pour des raisons de performance, mais la base POSIX permet un très haut niveau de portabilité des scripts conçus pour différents Oss conformes à POSIX.

La plupart des systèmes d'exploitation susmentionnés disposent d'un Shell interactif distinct qui est généralement doté de toutes les fonctionnalités. bash . Bash est en grande partie conforme à POSIX, mais possède également un grand nombre de commandes supplémentaires et supporte une syntaxe différente. En démarrant Bash avec l'option de ligne de commande --posix ou en exécutant 'set -o posix' pendant que Bash est en cours d'exécution, Bash se conformera plus étroitement à la norme POSIX en modifiant le comportement pour qu'il corresponde à celui spécifié par POSIX dans les domaines où la valeur par défaut de Bash diffère : https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html

Shebang et des chemins uniformes pour les exécutables 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 créer des Shell Shell, plus précisément, nous savons clairement quel chemin mettre dans l'expression shebang pour pointer vers un exécutable Shell approprié pour exécuter le Shell. Les systèmes de fichiers Unix/Linux/*BSD ne supportent pas intrinsèquement les extensions, donc les extensions de fichiers ne servent que d'indication supplémentaire, ou à des fins d'indexation.

Sur Debian/Ubuntu spécifiquement, bin/sh est un lien symbolique pointant vers bin/dash qui est un exécutable d'un tableau de bord Shell . Cela rend le système Shell, qui est estimé être 4x plus rapide et fait ~1/10 de la taille de bash, plus fonctionnel. source : https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-Shell-faster-than-bash

Le terminal interactif de 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

La règle générale serait :

Si une commande ou une option n'est pas définie par POSIX, ne la mettez pas dans un fichier de type #! /bin/sh script en premier lieu.

Convertir votre script ou vérifier les erreurs

Pour convertir votre script de bash à la forme POSIX, vous pouvez vouloir vérifier automatiquement les bogues dans votre script script ou voir quels changements dans votre bash script vous devriez faire pour le rendre compatible POSIX :

https://www.shellcheck.net/

http://mywiki.wooledge.org/Bashism

2voto

arielf Points 2623
$ 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 sur Ubuntu, est un exécutable presque 9 fois plus gros 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'.

Plus d'informations 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