WikiDer > Shell-Skript
EIN Shell-Skript ist ein Skript das ist für die geschrieben Schale entweder Dolmetscher des Befehlszeile. Es wird oft als relativ einfach angesehen Programmiersprache die sich auf die Systemadministration konzentriert. Zu den typischen Operationen, die von Shell-Skripten ausgeführt werden, gehören Dateimanipulation, Programmausführung und Textdruck. Normalerweise bezieht sich der Begriff Shell-Skript auf Skripte, die Unix-Shell geschrieben werden, während der Begriff Batch-Datei bezieht sich normalerweise auf andere Betriebssysteme.
In der Regel ist ein Shell-Skript eine Datei (oder Datei), die (einen oder mehrere) Shell-Befehle enthält.
Benutzen
In ihrer einfachsten Form können Shell-Skripte verwendet werden, um verschiedene Befehle automatisch und schnell auszuführen. Durch den Aufruf eines solchen Shell-Skripts entfällt die Notwendigkeit, all diese Befehle "von Hand" in die Befehlszeile einzugeben. Im folgenden Beispiel werden alle MP3-Dateien (*.mp3) im Home-Verzeichnis vom Benutzer in die verschoben Verzeichnis 'MP3':
mv ~/*.mp3 MP3
Dieses Beispiel zeigt:
- mit denen Befehlsdateien verschoben werden ('bitte')
- dass das Home-Verzeichnis durch das Zeichen "~" gekennzeichnet ist
- dass Verzeichnisse durch das Zeichen "/" getrennt sind
- wie der Platzhalter "*" verwendet wird, um verwandte Dateien abzugleichen
- dass sich das Verzeichnis "MP3" im aktuellen (Arbeits-)Verzeichnis befindet
Die meisten Shells haben die Fähigkeit, Muster (z. B. Wildcards) zu verwenden, um Dateien zu kennzeichnen oder auszuwählen, sodass Operationen an einer Auswahl von Dateien ausgeführt werden können. Das folgende Beispiel zeigt, wie in einer 'for'-Schleife ein anderer Dateiname der Datei zugewiesen wird Variable 'Dateiname':
für Dateinamen in *.mp3; d...; getan
Beachten Sie, dass nur Dateinamen ausgewählt werden, die auf '.mp3' enden.
Eine Variable wird häufig verwendet, um einem bestimmten Wert einen Namen zuzuweisen und diesen Wert in der benannten Variablen zu speichern. Der Wert der Variablen kann dann (während der Ausführung eines Shell-Skripts) ersetzt werden, wo immer diese Variable im Shell-Skript verwendet wird.
Moderne Shells bieten auch die Möglichkeit, Operationen an Textstücken durchzuführen.Das folgende Beispiel zeigt, wie der vollständige Pfadname (z. /etc/passwd) einer Datei, mit Ausnahme des Dateinamens selbst, wird unterdrückt und in einer Variablen 'base' gespeichert:
base=${filename##*/} # Variable $filename enthält den vollständigen PfadnamenBeachten Sie, dass der gesamte Text ab dem Zeichen '#' (nach dem Leerzeichen!) als Kommentar verwendet wird.
Um eine Kombination von Möglichkeiten aufzuzeigen, gehen Sie wie folgt vor, um alle Dateinamen umzubenennen, die auf '.mpg' enden:
für Namen in *.mpg; do mv "$name" "${name%%.mpg}.mpeg" # benenne file.mpg in file.mpegdone umDas obige Beispiel zeigt auch, wie a Dateierweiterung (oder Suffix) kann entfernt und ein neues verwendet werden Suffix angeklebt werden kann.
Das obige Skript kann auch in eine Zeile geschrieben werden als:
für Namen in *.mpg; do mv "$name" "${name%%.mpg}.mpeg"; fertig # umbenennen *.mpgWollen Sie jedoch auch Dateinamen mit einem anderen Suffix umbenennen, muss das Skript bearbeitet werden, was recht mühsam ist, wenn sich dieses Skript in einer Datei befindet.
für Namen in *.$1; do mv "$name" "${name%%.$1}.$2"; getanDieses Beispiel zeigt, dass Skriptsprachen (wie Shell-Skripte) auch spezielle Variablen unterstützen, die den Zugriff auf die Argumente ermöglichen, die einem Programm auf der Kommandozeile übergeben werden können. $1 bis einschließlich $9 Zugriff auf die ersten neun Argumente eines Shell-Skripts. Zum Beispiel kann das vorliegende Shell-Skript, das die speziellen Variablen $1 und $2 enthält, mit den beiden Argumenten 'txt' und 'text' aufgerufen werden, um alle Dateinamen umzubenennen, die mit '.txt' enden und sie stattdessen mit '.text' belassen.
Es ist zu beachten, dass zwischen Variablen innerhalb (des Prozesses) eines Shell-Skripts und (globalen) Umgebungsvariablen die der Betriebssystem-Shell bekannt sind. Die Shell erbt normalerweise nicht (die Werte) der in einem Shell-Skript verwendeten Variablen: Sobald ein Skript ausgeführt wurde, sind die im Shell-Skript verwendeten Variablen nicht mehr zugänglich. Um eine Variable in einem Shell-Skript in die Shell des Benutzers zu "exportieren", können einige Tricks verwendet werden:
- Lassen Sie das Shell-Skript eine Ausgabe generieren
- und lassen Sie diese Ausgabe von der Shell erfassen (mit Rückzitate), oder
- die Ausgabe über den (filternden) 'Pipe-Mechanismus' der Shell erfassen lassen, oder
- schreibe die Ausgabe in eine Datei
- den Quellmechanismus der Shell verwenden
- auf einem Bourne-Shell-ähnlichen ist das der Befehl "."
- in einer Csh-ähnlichen Shell das ist der Befehl "source"
Shell-Skripte können auch einen 'Exit-Code' oder 'Return-Code', einen bestimmten Zahlenwert, zurückgeben, nachdem das Shell-Skript beendet wurde. Dieser Exit-Code kann anzeigen, dass das Programm erfolgreich ausgeführt wurde (Exit-Code 0) oder dass die Ausführung in irgendeiner Weise zu einem Fehler geführt hat (mit einem anderen Exit-Code als 0). Es ist beispielsweise möglich, ein Programm nur auszuführen, wenn ein vorheriges Programm erfolgreich ausgeführt wurde. Ein Beispiel mit zwei Programmen namens 'a' und 'b':
ein && b
Hier wird zuerst das Programm 'a' ausgeführt und wenn das erfolgreich war (dh dass 'a' den Returncode 0) lieferte, dann wird 'b' ausgeführt.
Strukturierte Shell-Skripte können mithilfe von Kontrollflusskonstrukten (wie "if", "while" und "for"), Variablen und Unterprogrammen ("Funktionen") geschrieben werden. Diese Skripte können dann in ein größeres Ganzes (zB innerhalb einer Anwendung) eingebunden werden. Natürlich benötigen Systeme oder Programme mit hohen, komplexen Anforderungen meist leistungsfähigere Programmiersprachen, obwohl Shells auf ihre Art auch Leistung und Flexibilität besitzen, aber interpretiert werden müssen, was oft einen Geschwindigkeitsverlust bedeutet.
Andere Skriptsprachen
Für Operationen, die zu groß oder komplex sind, um von einfachen Shell-Skripten verarbeitet zu werden, bei denen es jedoch von Vorteil ist, eine Skriptsprache zu verwenden, anstatt ein Programm zu kompilieren, wurden viele andere leistungsstarke Skriptsprachen entwickelt. Zwei Beispiele für solche Skriptsprachen sind AWK und perl. Übrigens ist es einfach möglich, AWK- und Perl-Skripte in Shell-Skripte einzubinden.