Was ist der Unterschied zwischen "Shell" und "Bash" und was bedeuten diese Begriffe?
Soweit ich weiß, gibt es keinen Unterschied. Aber ich habe viele Bücher über "Shell" und andere über "Bash" gesehen!
Wenn ich also mit dem Terminal unter Mac OS X arbeiten und einige Bash-Skripte schreiben möchte, frage ich mich, für welche Art von Büchern ich mich entscheiden soll.
Antworten:
Eine " Shell " ist eine Software, die eine Schnittstelle zu einem Betriebssystem bietet. Beispielsweise ist explorer.exe die Standard-Shell in Windows (obwohl es Alternativen gibt ) und bietet unter OS X Finder weitgehend die gleiche Funktionalität. Unter Linux / * nix kann die Shell Teil der Desktop-Umgebung sein (wie Gnome oder KDE ) oder eine separate Softwarekomponente (wie Unity oder Cinnamon ).
Bei den obigen Beispielen handelt es sich um grafische Shells, die eine Kombination aus Fenstern, Menüs, Symbolen und anderen derartigen Elementen verwenden, um eine grafische Benutzeroberfläche (GUI) bereitzustellen, mit der über den Mauszeiger interagiert werden kann. Im Zusammenhang mit Software wie Bash oder dem Schreiben von Skripten wird unter "Shell" normalerweise ein Befehlszeileninterpreter verstanden, der weitgehend dieselben Aufgaben wie eine grafische Shell ausführt, außer dass er vollständig textbasiert ist.
Bash ist ein spezielles Beispiel für eine Befehlszeilen-Shell und wahrscheinlich eine der bekanntesten. Es ist die Standardeinstellung in vielen Linux-Distributionen sowie in OS X. Es wurde als Ersatz für die Bourne-Shell entwickelt (Bash steht) für "Bourne again shell") eine der ersten Unix-Shells .
Beispiele für Befehlszeilen-Shells unter Windows sind cmd.exe (auch als Eingabeaufforderung bezeichnet) und PowerShell .
quelle
Bash ist eine von mehreren Muscheln.
Eine Shell auf einem Unix- oder Unix-ähnlichen System wie OSX oder Linux ist ein Anwendungsprogramm, das eine Befehlszeilenschnittstelle zum Betriebssystem bereitstellt, mit der Sie Befehle eingeben und ausführen können. Es stehen verschiedene Shells zur Auswahl, aber alle bieten Platzhalter für Dateinamen, Piping, hier Dokumente, Befehlssubstitution, Variablen und Kontrollstrukturen für Bedingungstests und Iterationen.
Die ursprüngliche Unix-Shell war die Bourne-Shell , sh, geschrieben von Stephen Bourne bei Bell Labs. Dann kam die C-Shell , geschrieben von Bill Joy in Berkeley, seitdem als tcsh aktualisiert . Andere Shells sind die Korn-Shell , ksh, geschrieben von David Korn, ebenfalls bei Bell Labs, und bash , die "Bourne again-Shell", geschrieben von Brian Fox für das GNU-Projekt als kostenloser Ersatz für sh.
Heute ist Bash wahrscheinlich die beliebteste Unix-Shell, aber viele Leute (ich eingeschlossen) bevorzugen immer noch die C-Shell, basierend auf (wie es einigen von uns scheint) ihrer schöneren Syntax. Grundsätzlich ist es Geschmackssache, daher empfehle ich, die von mir verlinkten Wikipedia-Artikel zu lesen, um Ihnen den Einstieg zu erleichtern.
quelle
Der Begriff "Shell" ist gut benannt. Es ist buchstäblich eine Hülle um das Betriebssystem, die es dem Benutzer ermöglicht, mit dem Computer zu interagieren. Als es ursprünglich konzipiert wurde, gab es nur sehr wenige grafische Benutzeroberflächen (keine Fenster :(). Alles wurde über die Befehlszeile erledigt. Aber selbst die Befehlszeile brauchte einen Ort zum Leben. Sie lebte und lebt in einer Shell .
In einfachen Worten, damit die Befehlszeile nützlich war, benötigte sie Anweisungen, die sie aufrufen konnte. Daher wurden Programme in der Shell ausgeführt, damit die Befehlszeile verwendet werden kann. Die Programme waren eng in ihren eigenen Paketen zusammengefasst und sollten zusammenarbeiten. Dazu gehören Programme wie "ls" und "grep", "ps", "sed" usw. Sie enthalten auch Befehle zur Dateiumleitung wie ">" und "<" sowie Pipes ("|"). Noch wichtiger ist, dass sie auch Programmierkonstrukte wie bedingte Operationen enthalten (wenn dann für Schleifen, während Schleifen, Möglichkeiten, den Status zu überprüfen, der beim Ausführen einer Anweisung zurückgegeben wird (z. B. wenn Sie "ls" ausführen, hat es etwas gefunden?)) so wie das). Dies sind die Grundlagen komplexerer Befehlszeilenskripte (Shell).
Wenn jemand den Begriff "Bash Shell" verwendet, spricht er von einem Befehlszeileninterpreter namens "Bash", der in der O / S-Shell ausgeführt wird. Man könnte es sich als Abkürzung für 'Bash Shell Interpreter' vorstellen. Es gibt andere Dolmetscher wie Bourne (Bash ist eine neue und verbesserte Bourne Shell und steht für Bourne Again Shell). Es gibt auch die C-Shell, die K-Shell (von vielen bevorzugt, die komplexe Shell-Skripte schreiben) und andere GNU-Varianten. Im Laufe der Jahre ist es üblich geworden, auf den bestimmten Befehlszeileninterpreter zu verweisen, den Sie als Shell verwenden, da einer ohne den anderen nicht verwendet werden kann. Aber die Realität ist, dass sie unterschiedlich sind.
Warum sie eigentlich als Befehlszeileninterpreter und nicht als eigentliche Shell bekannt sind: Dies liegt daran, dass sie in der Shell leben und alle Befehle so interpretieren, als würden sie in einem Programm ausgeführt. Und der Shell ist es egal, welchen Interpreter Sie darin ausführen, solange sie den richtigen Standards entspricht.
Und warum sie Dolmetscher genannt werden, liegt daran, dass sie wirklich Dolmetscher sind. Auch wenn Sie ein Skript nicht explizit ausführen (und ein Skript ist eigentlich nur eine Textdatei mit Befehlen, die Sie erstellen, damit Sie dieselben Befehle immer wieder ausführen können, ohne sie erneut eingeben zu müssen). Nehmen Sie zum Beispiel den bescheidenen Befehl 'ls'. Wenn Sie es ausführen, wird eine Liste der Dateien zurückgegeben. Für Ihre Frage ist es jedoch wichtiger, wie es ausgeführt wird: Es wird tatsächlich im Kontext des Befehlszeileninterpreters ausgeführt, selbst wenn Sie nur einen scheinbar einfachen einmaligen Befehl ausführen. Das heißt, es läuft so, als wäre es eine Aussage in einem größeren Programm. Es läuft wie in einer Shell-Skript-Skriptdatei, ohne sich tatsächlich in einer Shell-Skriptdatei zu befinden. Eine anonyme Shell-Skriptdatei.
Alles, was Sie in der Befehlszeile ausführen, hat dies gemeinsam (sei es ein einzelner Befehl wie 'ls' oder eine Skriptdatei voller Befehle und Iteratoren und bedingter Anweisungen): Alles wird vom Befehlszeileninterpreter verarbeitet. sei es Bash, C-Shell, K-Shell (Standard unter AIX übrigens).
Um zu sehen, was ich meine, machen Sie ein Verzeichnis 'test':
Geben Sie es ein und führen Sie die folgenden Befehle aus
Sie erhalten eine Antwort wie "Keine solche Datei oder kein solches Verzeichnis". Geben Sie nun den Befehl ein
($? sagt, sag mir, was du in einem kryptischen Computer gefunden hast.) Du solltest sehen, dass es eine Zahl (es sollte sein) '2' zurückgibt. Dies ist der Rückkehrcode von grep, der "keine solche Datei oder kein solches Verzeichnis" bedeutet. Führen Sie nun Folgendes aus:
Sie sehen die Datei 'hello.txt', die vom ersten grep-Befehl zurückgegeben wurde, und sollten jetzt das 'echo $?' Geben Sie die Zahl '0' zurück, was bedeutet, dass tatsächlich etwas gefunden wurde.
Selbst wenn diese scheinbar einmaligen Befehle ausgeführt werden, verhält sich der Befehlszeileninterpreter so, als wären sie Teil eines größeren Programms und verfolgt ihre Rückgabewerte. Wenn Sie das * am Ende des Befehls grep vergessen, wird es daher nicht zurückgegeben. Es ist bekannt, dass die Aussage unvollständig ist und mehr Input erwartet. Schließlich könnten Sie ihn möglicherweise bitten, die Ergebnisse einer Schleife zu erfassen, deren Schreiben und Ausführen in der Befehlszeile völlig legal ist.
Unterm Strich ist die Shell die Shell, und der Interpreter (unabhängig vom Namen des von Ihnen verwendeten, 'Bash', K-Shell usw.) ist unterschiedlich. Aber oft werden sie austauschbar verwendet, weil sie zu jedem Zeitpunkt vollständig miteinander verbunden sind.
quelle
Shell ist eine textbasierte Benutzeroberfläche.
Bash ist eine Art Shell.
quelle
bash
gehört zurshell
Familie, aber es gibt viele andere Muscheln.Unter Minix3 gibt es beispielsweise die
ash
Shell, die assoziative Arrays wie nicht unterstütztbash4
.Der POSIX- Standard ist ein Versuch, eine portable API zwischen verschiedenen Shells und Betriebssystemen zu erstellen.
Siehe http://en.wikipedia.org/wiki/Unix_shell#Bourne_shell_compatible
quelle
bash
ist eine der vielen Muscheln, die es gibt.Alle Muscheln haben ihre Ähnlichkeiten und Unterschiede. Beispielsweise kann ein in bash geschriebenes Skript vollständig oder weitgehend mit einer anderen Shell (z. B. zsh ) kompatibel sein .
Aufgrund der
bash
weit verbreiteten Tatsache wird häufig impliziert, dass ein Skript damit kompatibel ist.Wenn Sie ein Buch kaufen möchten, kaufen Sie eines, das speziell für die Shell geschrieben wurde, die Sie verwenden möchten. Es wäre jedoch eine gute Idee, sich über ihre Unterschiede zu informieren, bevor Sie Geld ausgeben.
quelle