Was ist Shell?
Wenn du mit einem Microsoft-, Apple- oder Linux-Betriebssystem (OS) arbeitest, benutzt du Shell-Skripte, vielleicht ohne es zu wissen. Tatsächlich interagierst du jedes Mal, wenn du dein Linux-Betriebssystem startest, mit Shells.
Shell-Skripte helfen Programmierern, Datenwissenschaftlern und Gelegenheitsnutzern, Zeit zu sparen und sich wiederholende Aufgaben durch Automatisierung zu vermeiden. Skripte können zum Beispiel tägliche Backups durchführen, Patches installieren, Systeme und Aktivitäten überwachen und Routine-Audits durchführen.
Shells lesen ziemlich intuitive, menschenlesbare Befehle und wandeln sie in etwas um, das das System versteht.
Was ist eine Shell?
Eine Shell ist eine Art Computerprogramm, das als Kommandozeileninterpreter bezeichnet wird und mit dem Linux- und Unix-Benutzer ihr Betriebssystem über eine Kommandozeilenschnittstelle steuern können. Shells ermöglichen es den Benutzern, effizient und direkt mit ihren Betriebssystemen zu kommunizieren.
Shell-Skripting ist keine eigenständige Sprache, aber da es einige Befehle in natürlicher Sprache verwendet, ist es leicht zu erlernen, auch ohne Programmierkenntnisse. Allerdings wird jeder Shell-Skriptdialekt als eine Sprache betrachtet, und wenn du komplexere Aktivitäten planst, brauchen Shells viel Übung.
Shell-Skripte sind eine der einfachsten Möglichkeiten, eine Automatisierung einzurichten. Durch die Verwendung von Linux- oder Unix-Befehlen können Data Scientists, DevOps- und TechOps-Mitarbeiter mit Shell-Skripten bedingte und Schleifen-Kontrollstrukturen verwenden, um Befehle zu wiederholen.
Shell-Skripte haben nicht immer den gleichen Namen. Sh,
Bash (die am weitesten verbreitete), csh,
und tesh sind allesamt Shell-Skripte. In IBMs VM-Betriebssystem heißen sie EXEC, in DOS werden Shell-Skripte Batch-Dateien genannt.
Es gibt zwei Kategorien von Shells: Kommandozeilen-Shells und grafische Shells. Auf Kommandozeilen-Shells wird über Kommandozeilen-Schnittstellen zugegriffen, wobei die Systeme Eingaben in Form von menschenlesbaren Befehlen erhalten und dann die Kommandozeilen-Schnittstellen verwenden, um die Ausgaben anzuzeigen.
Grafische Shells verwenden eine grafische Benutzeroberfläche (GUI), um Interaktionen und wichtige Vorgänge wie das Öffnen, Schließen und Speichern von Dateien durchzuführen.
Hier sind einige Beispiele für Shell-Befehle:
Um herauszufinden, in welchem Verzeichnis du bist: pwd
So findest du einen Befehl im Handbuch: man command
Um eine Textdatei scrollbar zu machen: less file 1
oder more file 1
Verschiedene Arten von Muscheln
Bourne-Shell
So cool der Name auch sein mag, die Bourne-Hülle hat nichts mit Spionen und rasanten Verfolgungsjagden zu tun. Die Bourne Shell, die am zweithäufigsten verwendete Unix-Shell, wurde 1979 von Stephen Bourne in den Bell Labs entwickelt. Wie sein Vorgänger, die Thompson-Shell, lautet der ausführbare Dateiname von Bourne sh
.
Die Bourne-Shell ist die Standardshell des Betriebssystems Solaris. Trotz ihres Alters ist die Bourne-Shell heute wegen ihrer Geschwindigkeit und Kompaktheit beliebt. Die Bourne-Shell ist jedoch nicht sehr interaktiv und kann ihre command history.
nicht abrufen. Außerdem fehlen ihr logische und arithmetische Ausdrücke.
Zu den Bourne-Aufforderungen gehören:
- Befehl full-path:
/bin/sh
und/sbin/sh
- Standard für Nicht-Root-Benutzer:
$
- Root User Standard:
#
Kommandozeile
Die C-Shell, Dateiname csh
, und ihr Vorgänger, Dateiname tcsh
, ist eine weitere Unix-Shell aus den späten 70er Jahren. Sie wurde von Bill Joy entwickelt, der damals Student an der University of California in Berkeley war.
Anders als die Bourne-Shell ist die C-Shell interaktiv und erkennt command history
und aliases
. C-Shells enthalten auch eine C-ähnliche Ausdruckssyntax und eingebaute Arithmetik.
Befehlszeilen-Eingabeaufforderungen enthalten:
- Befehl full-path:
/bin/csh
- Standard-Hostname für Nicht-Root-Benutzer:
%
- Standard-Hostname des Root-Benutzers:
#
KornShell
Die KornShell, Dateiname ksh
, wurde in den frühen 1980er Jahren von David Korn in den Bell Labs entwickelt. Die KornShell enthält viele der Funktionen der C-Shell und ist ein Superset der Bourne-Shell und daher abwärtskompatibel mit dieser.
Die KornShell läuft schneller als die C-Shell. Sie führt Bourne-Shell-Skripte aus und verfügt über C-ähnliche Arrays, Funktionen und String-Manipulationsmöglichkeiten. Außerdem verfügt es über eine eingebaute Arithmetik.
Zu den KornShell-Eingabeaufforderungen gehören:
- Befehl full-path:
/bin/ksh
- Nicht-Root-Benutzer Standard: $
- Root-Benutzer Standard: #
GNU Bourne-Again-Shell
Die GNU Bourne-Again- oder Bash-Shell ist eine Open-Source-Alternative zur Bourne-Shell. Es wurde von Brian Fox für das GNU-Projekt entwickelt und 1989 veröffentlicht. Sie ist nicht nur voll kompatibel mit der Bourne-Shell, sondern übernimmt auch viele der besten Funktionen von KornShells und C-Shells. Die GNU Bourne-Again-Shell hat automatisch zugeordnete Pfeiltasten zum Bearbeiten und Aufrufen von Befehlen.
GNU Bourne-Again fordert dich unter anderem auf:
- Befehl full-path:
/bin/bash
- Standard-Eingabeaufforderung für Nicht-Root-Benutzer:
bash-x.xx$
- Root User Standard:
bash-x.xx#
Was Shell-Skripting bewirkt
Diese Analogie ist etwas vereinfacht, aber stell dir Shell-Skripte als Autofill für Programmierer vor. Anstatt die Befehle einzeln auf der Tastatur einzugeben, verwendet die Shell eine Reihe von Befehlen in einzelnen Skripten, die der Benutzer mit einem einfachen Dateinamen in der Befehlszeile starten kann. Shell-Skripte dienen der Programmausführung, dem Textumbruch und der Dateibearbeitung.
Shell-Skripte können eine Reihe von Aufgaben übernehmen, z. B. die Überwachung der Festplattennutzung, die Durchführung von Backups, die Erstellung von Befehlstools, die Manipulation von Dateien, die Ausführung von Programmen, die Verknüpfung von Programmen, den Abschluss von Stapeln usw.
Die wichtigsten Alternativen zur Shell
In IBMs VM-Betriebssystem heißen sie EXEC; unter DOS werden Shell-Skripte Batch-Dateien genannt. Das sind aber immer noch Shell-Skripte. Andere Skriptsprachen wie Javascript, Python, Perl und TCL sind ebenfalls Skriptsprachen. Es überrascht nicht, dass alle Computerprofis ihre Favoriten haben, und wir werden gleich auf die Vor- und Nachteile der Muscheln eingehen.
Warum ist Shell so beliebt?
Shells sind auf fast allen Betriebssystemen verbreitet, weil sie effizient und leicht aktualisierbar sind. Es überwacht das System deines Computers und führt routinemäßige Backups durch, ohne dass du daran denken musst.
Es ist nicht nötig, die Syntax zu wechseln, denn die Syntax und die Befehle der Shell sind identisch mit denen, die in der Kommandozeile eingegeben werden. Außerdem ist es einfach und schnell, Shell-Skripte zu schreiben: Sie lassen sich schnell starten und sind leicht zu debuggen.
Was sind die Nachteile von Shell-Skripten?
Shell-Skripte können fehleranfällig und schwer zu diagnostizieren sein, wenn Probleme auftreten. Shells sind nicht für komplexe oder große Aufgaben gedacht und sie sind langsam in der Ausführung. Außerdem bieten Shells kaum Datenstrukturen und können Syntax- oder Designfehler aufweisen.
Wann wurde Shell gegründet?
Das erste Shell-Skript wurde in den frühen 1960er Jahren von Louis Pouzin, einem Mitarbeiter des MIT, entwickelt. Seine erste Kommandozeile war RUNCOM
, die Informatiker von sich wiederholenden Aufgaben wie Kompilieren, Aktualisieren, Umbenennen und Verschieben befreite.
Obwohl Pouzin kein Experte für Computersprachen war, oder vielleicht gerade weil er es nicht war, glaubte er, dass Befehlszeilen eine eigenständige Sprache sein können.
Mitte der 1960er Jahre schloss sich Pouzin mit dem britischen Wissenschaftler Christopher Strachey zusammen. Strachey entwickelte einen Makro-Generator, der als Grundlage für Pouzins Befehlssprache diente, die auf dem damals hochmodernen Multics-Betriebssystem lief.
Wie Shell zu seinem Namen kam
Pouzin nannte seine neue Sprache "Shell", weil sie die äußerste Schicht eines Betriebssystems ist.
Shell-Merkmale
Shells sind bei Programmierern beliebt, weil sie übersichtlich sind. Das heißt aber nicht, dass sie einfach sind. Shells bieten verschiedene Funktionen, darunter:
Hintergrundverarbeitung
Einer der größten Vorteile von Shell-Skripten ist, dass sie im Hintergrund laufen können. Je nach Befehl können Shells im Vordergrund oder im Hintergrund laufen. Vordergrundprozesse sind auf dem Bildschirm sichtbar und können nur sequentiell ablaufen.
Hintergrundprozesse werden nicht auf dem Bildschirm angezeigt und können nicht sequentiell ablaufen. Um ein Shell-Skript im Hintergrund auszuführen, musst du einfach ein kaufmännisches Und (&) am Ende des Skripts hinzufügen.
Wildcard-Ersetzungen
Mit Platzhalter-Ersetzungen können Systeme mehr als einen Befehl auf einmal verarbeiten oder Satzteile aus Textdateien finden. Zum Beispiel weist *
das System an, auf jede beliebige Zeichenkette zu passen, auch auf leere. ?
passt auf ein einzelnes Zeichen, [example]
passt auf jedes Zeichen ("Beispiel" ist nur ein Beispiel) und [1-9]
(ein weiteres Beispiel) weist die Shell an, auf Zeichen innerhalb des Bereichs zu passen.
Befehls-Aliase
Shell-Aliase sind Abkürzungsbefehle. Manche Aliasnamen bestehen aus einem einzigen Wort, andere aus einem einzigen Buchstaben. Um die Liste der Aliasnamen zu sehen, müssen die Nutzer nur ·alias
eingeben.
Befehlsgeschichte
Es gibt viele Möglichkeiten, wie Shells Zeit und Mühe sparen, aber eine besonders praktische Funktion ist der Befehlsverlauf. Anstatt die Befehle erneut abzutippen, zeigt der Befehl history
alle Befehle an, die während dieser Sitzung verwendet wurden.
Dateinamen-Ersetzung
Die Ersetzung von Dateinamen wird auch als "Globbing" bezeichnet. Wenn ein Wort Zeichen wie ?
, *
oder [
enthält oder mit ~
beginnt, sieht die Shell das Wort als Muster und ersetzt es durch eine alphabetische Liste von Dateinamen, die dem Muster entsprechen.
Umleitung von Eingaben/Ausgaben
Mit der Ein-/Ausgabe-Umleitung können Benutzer die Standardeingabe (stdin) und die Standardausgabe (stdout) mit dem Bildschirm, der Tastatur oder einer Datei vertauschen.
Rohrleitungen
Shell-Piping ist eine weitere Art der Umleitung, die die Ausgabe eines Befehls/Prozesses/Programms an einen anderen Befehl/Prozess/Programm sendet. Dadurch können die Befehle/Prozesse/Programme gleichzeitig arbeiten und ermöglichen eine kontinuierliche Datenübertragung, ohne dass der Bildschirm oder temporäre Textdateien durchlaufen werden müssen.
Shell-Variablen-Ersatz
Wenn die Shell auf einen Ausdruck stößt, der Sonderzeichen enthält, übersetzt sie den Code in etwas, das für die Benutzer besser erkennbar ist. Diesen Prozess nennt man Variablenersetzungen oder einfach Variablen.
Variablen werden auch von erfahreneren Programmierern verwendet. Wenn ein Programmierer zum Beispiel die tatsächlichen Werte nicht kennt, bevor er ein Programm ausführt, kann er die Variable als Platzhalter verwenden, bevor der Code zur Ausführung bereit ist.
Wie Muscheln variieren
Es gibt zwei Arten von Shells: "shell" (sh) und "bash". Beide laufen innerhalb des Unix-Betriebssystems. Shell ist ein allgemeiner Name für das Skripting in jeder Shell. Wie der Name schon sagt, ist die Bash (Bourne Again Shell) eine verbesserte und erweiterte Shell.
Die Bash nutzt Upgrades für mehr Funktionalität, unterstützt Job-Kontrollen, ist einfacher zu bedienen als sh und unterstützt den Befehlsverlauf. Sh unterstützt keine Befehlshistorie; ihre Skripterstellung funktioniert in jeder Shell und ist portabler.
Wie sich Shell im Laufe der Jahre entwickelt hat
Im Laufe der Jahre haben sich die Muscheln weiterentwickelt und sind mehr oder weniger die gleichen geblieben. Die Bourne-Shell war ein großer Fortschritt gegenüber der ursprünglichen Thompson-Shell, aber viele der ursprünglichen Funktionen sind geblieben. Natürlich haben sich die Computer und unsere Erwartungen verändert.
Es gibt potenziell so viele Shells wie es Benutzer gibt, aber im Grunde gibt es zwei Arten von Shells - Kommandozeilen oder Bourne. Alles andere ist eher ein Dialekt als eine andere Sprache.
Unix-Shells
Unix-Shells sind das Original und sie sind immer noch sehr beliebt. Unix-Shells funktionieren auf Unix und Unix-verwandten Betriebssystemen, wie z.B. Macs.
Befehlszeilen
Kommandozeilen (csh) sind die gängigsten Unix-Shells. Kommandozeilen eignen sich hervorragend für die interaktive Arbeit, z. B. für Aliase, cdpath, Jobkontrolle, Pfad-Hashing, Verzeichnisstapel usw. Außerdem bieten sie Bearbeitungs- und Verlaufsfunktionen.
Tenex Kommandozeile
Die Tenex-Kommandozeile (tcsh) wurde von Ken Greer von der Caregia Melo University entwickelt. Tenex wurde als eine Verbesserung gegenüber der ursprünglichen Kommandozeilenversion angesehen. Anders als das ursprüngliche C bietet Tenex unter anderem die Möglichkeit, die Befehlszeile zu bearbeiten und zu vervollständigen. 1981 fusionierte die tsch mit der csh.
Kornmuscheln
Die Korn-Shell (ksh) ist eine weitere Unix-Shell, aber sie ist eine Art Kompromiss zwischen C- und Bourne-Shells, mit Abwärtskompatibilität zu letzteren. Die Korn-Shell wurde in den frühen 1980er Jahren von David Korn in den Bell Labs entwickelt.
Bourne wieder Muscheln
Die Bourne Again Shell (Bash) ist eine Open-Source-Unix-Shell, die in den späten 1990er Jahren von Brian Fox für das GNU-Projekt als Erweiterung der Bourne-Shell geschrieben wurde.
Exotische Muscheln
Obwohl sie alle auf der C- oder Bourne-Shell basieren, haben Programmierer Hunderte, wenn nicht sogar 1.000 verschiedene Dialekte entwickelt. Manche sind nützlich und manche machen einfach Spaß.
Wer benutzt Shell?
Fast jeder, der einen Computer benutzt, profitiert von Shells, aber besonders nützlich sind sie für Systemadministratoren, DevOps-Leute, Programmierer und Datenwissenschaftler. Shells werden verwendet, um Aufgaben und Anwendungen zu automatisieren, Pakete zu installieren, Daten zu sichern oder wiederherzustellen, und natürlich zum Programmieren.
Shell Beispiele
Die Shells sind so einfach oder so komplex, wie der Benutzer es wünscht. Ein einfacher Bash-Gruß lautet zum Beispiel: echo “hello $USER”
, während komplexe Shell-Skripte fast grenzenlos sind. Hier sind einige grundlegende Beispiele:
Erstelle eine Datei in der Bash mit einem geeigneten Editor. Hier verwenden wir den Editor vi.
$ vi example.sh
Drücke die Taste "i", um mit dem Einfügen des Codes zu beginnen:
#!/bin/bash
valid=true
count=1
while [ $valid ]
do
echo $count
if [ $count -eq 10 ];
then
break
fi
((count++))
done
Ausführen mit Hilfe von
bash example.sh
$vi example2.sh
#!/bin/bash
echo "Enter first number"
read x
echo "Enter second number"
read y
((sum=x+y))
echo "The result of addition = $sum"
bash example2.sh
Karriere bei Shell
Betrachte Shell-Skripting nicht als Karrierepfad, sondern als nützliches Werkzeug im Arsenal eines Datenwissenschaftlers. Datenexperten aller Art müssen mehrere Sprachen beherrschen (oder sollten es zumindest), und Shell-Skripte helfen ihnen, die Sprachen effizienter zu nutzen.
Dennoch gibt es in einigen Unternehmen Rollen, die speziell Shell-Skripting erfordern. Das Durchschnittsgehalt liegt bei 78.000 $. Dennoch sind Shell-Skripte ein Baustein für Rollen wie Systemadministratoren, die sechsstellige Gehälter einbringen können.
Fazit
Shell ist wie ein roter Faden, der sich durch jede Programmiersprache zieht. Komplexe Befehle werden auf prägnante und intuitive Kurzbefehle reduziert. Shell zu verstehen ist eine wichtige Fähigkeit für jeden Datenwissenschaftler oder Computertechniker. Erfahre mehr über Shell im DataCamp-Kurs "Einführung in die Shell".
Shell FAQ's
Was ist der Kernel?
Der Kernel ist der wichtigste Teil des Betriebssystems. Der Kernel ist dafür verantwortlich, den Programmen des Computers Speicher und Zeit zuzuweisen, und er verwaltet die Kommunikation und den Dateispeicher als Reaktion auf Systemaufrufe.
Was ist die Schale?
Die Shell ist die Schnittstelle zwischen dem Kernel und dem Benutzer.
Was sind die Vorteile von Shell?
Wir wissen bereits, dass die Shell effizient ist und viele langweilige Aufgaben eines Benutzers übernimmt; aber darüber hinaus können die Benutzer die Skripte an ihre eigenen Bedürfnisse anpassen.
Was sind die Nachteile von Shell?
Ein einziger Fehler kann sich als sehr kostspielig und schwer zu erkennen erweisen. Außerdem sind Shells nicht sehr portabel zwischen verschiedenen Betriebssystemen.
Was ist der Unterschied zwischen Unix und Linux?
Linux ist ein Unix-Klon, der von Linus Torvalds entwickelt wurde. Linux ist an und für sich kein Betriebssystem; es ist ein Kernel. Unix umfasst jedoch den Kernel, die Shell und die Programme.
Welche Shells werden üblicherweise auf Linux- und Unix-Systemen verwendet?
Bash oder die Bourne Again Shell ist die am häufigsten verwendete Shell, aber sowohl Linux als auch Unix unterstützen auch Kommandozeilen, KornShells und TCSH.
Was ist die Shell-Syntax?
In der natürlichen Sprache bezieht sich die Syntax darauf, wie Wörter und Phrasen angeordnet sind. Die Shell-Syntax ist sehr ähnlich; sie bezieht sich auf die Reihenfolge der Operationen.
Was ist ein/e Dolmetscher/in?
Ein Interpreter interpretiert einzelne Anweisungen in Maschinencode.
Was ist ein Compiler?
Ein Compiler übersetzt High-Level-Programme in komplexere Maschinensprache.
Wie führt man eine Shell-Datei aus?
Setze die Erlaubnis mit: chmod+x script-name-here.sh
Dann führe es aus mit: ./script-name-here.sh
oder sh script-name-here.sh.