Quelle est la différence entre "Shell" et "Bash" et que signifient ces termes?
Pour autant que je sache, il n'y a pas de différence. Mais j'ai vu de nombreux livres sur "Shell" et d'autres sur "Bash"!
Donc, si je veux travailler avec le terminal sur Mac OS X et écrire des scripts bash, je me demande quel type de livres je devrais choisir.
Réponses:
Un « shell » est un logiciel qui fournit une interface avec un système d'exploitation. Par exemple, explorer.exe est le shell par défaut dans Windows (bien qu'il existe des alternatives ), et sous OS X Finder fournit une grande partie des mêmes fonctionnalités. Sous Linux / * nix, le shell peut faire partie de l'environnement de bureau (comme Gnome ou KDE ), ou peut être un composant logiciel distinct assis dessus (comme Unity ou Cinnamon ).
Les exemples ci-dessus sont tous des shells graphiques qui utilisent une combinaison de fenêtres, menus, icônes et autres éléments de ce type pour fournir une interface utilisateur graphique (GUI) qui peut être interagie avec le curseur de la souris. Cependant, dans le contexte de logiciels comme Bash, ou d'écriture de scripts, "shell" est généralement considéré comme un interpréteur de ligne de commande, qui remplit en grande partie les mêmes fonctions qu'un shell graphique, sauf qu'il est entièrement basé sur du texte.
Bash est un exemple spécifique d'un shell de ligne de commande, et est probablement l'un des plus connus, étant la valeur par défaut dans de nombreuses distributions Linux ainsi que OS X. Il a été conçu en remplacement du shell Bourne (Bash se dresse pour "Bourne again shell"), l'un des premiers shells Unix .
Des exemples de shells de ligne de commande sous Windows incluent cmd.exe (également appelé invite de commande) et PowerShell .
la source
Bash est l'un des nombreux obus.
Un shell sur un système Unix ou Unix comme OSX ou Linux est un programme d'application qui fournit une interface de ligne de commande au système d'exploitation, vous permettant de taper des commandes et de les exécuter. Il existe un certain nombre de shells différents à choisir, mais ils fournissent tous des caractères génériques de nom de fichier, des tuyaux, des documents ici, la substitution de commandes, des variables et des structures de contrôle pour les tests de condition et l'itération.
Le shell Unix original était le shell Bourne , sh, écrit par Stephen Bourne aux Bell Labs. Puis vint le shell C , écrit par Bill Joy à Berkeley, depuis mis à jour en tant que tcsh . D'autres shells incluent le shell Korn , ksh, écrit par David Korn, également aux Bell Labs, et bash , le "Bourne again shell", écrit par Brian Fox pour le projet GNU en remplacement gratuit de sh.
Aujourd'hui, bash est probablement le shell Unix le plus populaire, mais beaucoup de gens (moi y compris) préfèrent toujours le shell C basé sur (ce que certains d'entre nous semblent) sa syntaxe plus agréable. Fondamentalement, c'est une question de goût, donc je vous recommande de lire les articles Wikipedia que j'ai liés pour vous aider à démarrer.
la source
Le terme «coquille» est bien nommé. C'est littéralement un shell autour de l'O / S permettant à l'utilisateur d'interagir avec l'ordinateur. Quand il a été conçu à l'origine, il y avait très peu ou pas d'interfaces utilisateur graphiques (pas de fenêtres :(). Tout a été fait sur la ligne de commande. Mais même la ligne de commande avait besoin d'un endroit pour vivre. Elle vivait, et fait toujours, dans un shell .
En termes simples, pour que la ligne de commande soit utile, elle avait besoin d'instructions qu'elle pouvait appeler. Les programmes ont donc été conçus pour s'exécuter à l'intérieur du shell pour la ligne de commande à utiliser. Les programmes étaient étroitement regroupés dans leurs propres packages et avaient pour objectif de fonctionner ensemble. Ils incluent des programmes comme "ls" et "grep", "ps", "sed", etc. Ils incluent également des commandes de redirection de fichiers comme ">" et "<" et des tuyaux ("|"). Plus important encore, ils incluent également des constructions de programmation comme des opérations conditionnelles (si, alors, sinon, pour les boucles, tandis que les boucles, des moyens de vérifier le statut renvoyé lorsque vous exécutez une instruction (par exemple, si vous exécutez "ls, at-il trouvé quelque chose?), Chose comme ça). Ce sont les fondements de scripts de ligne de commande (shell) plus complexes,
Lorsque quelqu'un utilise le terme «Bash Shell», il s'agit d'un interpréteur de ligne de commande appelé «Bash» qui s'exécute dans le shell O / S. Vous pourriez penser que c'est l'abréviation de «Bash Shell Interpreter». Il existe d'autres interprètes comme Bourne (Bash est un «Bourne Shell nouveau et amélioré et il est l'abréviation de Bourne Again Shell). Il y a aussi le C-Shell, le K-Shell (favorisé par beaucoup de ceux qui écrivent des scripts shell complexes) et d'autres variantes GNU. Au fil des ans, il est devenu habituel de se référer à l'interpréteur de ligne de commande particulier que vous utilisez comme shell, car l'un ne peut pas être utilisé sans l'autre. Mais la réalité est qu'ils sont différents.
Quant à savoir pourquoi ils sont correctement connus en tant qu'interprètes de ligne de commande et non pas comme le shell réel: c'est parce qu'ils vivent dans le shell et interprètent toutes les commandes comme si elles s'exécutaient dans un programme. Et le shell ne se soucie pas de l'interpréteur que vous y exécutez, tant qu'il répond aux normes correctes.
Et pourquoi ils sont appelés interprètes, c'est parce qu'ils sont vraiment des interprètes. Même si vous n'exécutez pas explicitement un script (et qu'un script n'est en fait qu'un fichier texte de commandes que vous créez afin que vous puissiez exécuter les mêmes commandes encore et encore sans avoir à les saisir à nouveau). Par exemple, prenez l'humble commande «ls». Lorsque vous l'exécutez, il renvoie une liste de fichiers. Mais la façon dont il s'exécute est plus importante pour votre question: il s'exécute réellement dans le contexte de l'interpréteur de ligne de commande, même si vous exécutez simplement ce qui semble être une simple commande unique. Autrement dit, il fonctionne comme s'il s'agissait d'une déclaration faisant partie d'un programme plus vaste. Il fonctionne comme s'il se trouvait dans un fichier de script de script shell sans être réellement dans un fichier de script shell. Un fichier de script shell anonyme pour ainsi dire.
Tout ce que vous exécutez sur la ligne de commande a ceci en commun (que ce soit une seule commande comme 'ls' ou un fichier de script rempli de commandes et d'itérateurs et d'instructions conditionnelles): tout est traité par l'interpréteur de ligne de commande; que ce soit Bash, C-Shell, K-Shell (par défaut sur AIX btw).
Pour voir ce que je veux dire, faites un répertoire 'test':
Entrez-le et exécutez les commandes suivantes
Vous obtiendrez une sorte de réponse comme «aucun fichier ou répertoire». Entrez maintenant la commande
($? dit, dites-moi ce que vous avez trouvé dans un ordinateur crypté.) Vous devriez le voir retourner un nombre (il devrait être) '2'. C'est le code de retour de grep qui signifie «aucun fichier ou répertoire». Exécutez maintenant ce qui suit:
Vous verrez le fichier 'hello.txt' renvoyé par la commande grep initiale et vous devriez maintenant voir 'echo $?' renvoie le nombre «0», ce qui signifie qu'il a effectivement trouvé quelque chose.
Même si ces commandes apparemment uniques sont exécutées, l'interpréteur de ligne de commande agit comme si elles faisaient partie d'un programme plus vaste et gardait une trace de leurs valeurs de retour. C'est pourquoi si vous oubliez le * à la fin de la commande grep, il ne revient pas. Il sait que la déclaration est incomplète et attend plus de commentaires. Après tout, vous pourriez peut-être lui demander de récupérer les résultats d'une boucle qui est parfaitement légale pour écrire et s'exécuter sur la ligne de commande.
En fin de compte, le shell est le shell et l'interpréteur (quel que soit le nom de celui que vous utilisez, «Bash», k-shell, etc.) est différent. Mais souvent, ils sont utilisés de manière interchangeable, car à un instant donné, ils sont complètement liés.
la source
Shell est une interface utilisateur basée sur du texte.
Bash est un type de shell.
la source
bash
fait partie de lashell
famille, mais il y a plein d'autres coquilles.Par exemple, sur Minix3 , il y a le
ash
shell, il ne prend pas en charge les tableaux associatifs commebash4
.Le standard POSIX est une tentative de création d'une API portable entre différents shells et OS.
Voir http://en.wikipedia.org/wiki/Unix_shell#Bourne_shell_compatible
la source
bash
est l'un des nombreux obus qui existent.Tous les obus ont leurs similitudes et leurs différences. Par exemple, un script écrit en bash peut être entièrement ou largement compatible avec un autre shell (par exemple zsh ).
En raison du fait qu'il
bash
est très répandu, il est souvent sous-entendu qu'un script est compatible avec lui.Si vous cherchez à acheter un livre, achetez-en un écrit spécialement pour la coque que vous souhaitez utiliser. Ce serait une bonne idée de lire leurs différences avant de dépenser de l'argent.
la source