Zum Inhalt springen

Shellskript

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 26. März 2021 um 00:59 Uhr durch Messerjokke79 (Diskussion | Beiträge) (Kompatibilität verschiedener Unix-Shells untereinander). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Shell-Skript


Shell-Skript .bash_profile im Texteditor ed

Dateiendung: .sh
MIME-Type: application/x-shellscript
Erstveröffentlichung: mit UNIX
Art: Skriptsprache
Enthalten in: Unix-Shell
Erweitert von: div. Unix-Shells, u. a. Bash, Z shell u.v.m.
Standard(s): POSIX


Shell-Skript .bash_profile im Texteditor ed

Ein Shellskript oder Shell-Skript ist ein Computerprogramm, das von einer Shell interpretiert und ausgeführt wird. Es ist letztlich eine ausführbare Textdatei, in der all jene Anweisungen verwendet werden können, die ein Benutzer auch in der Befehlszeile nutzen kann.

Laut dem Informatiker Brian Kernighan ist die Shell selbst eine Programmiersprache.[1]

“The shell is actually a programming language: it has variables, loops, decision-making, and so on.”

„Die Shell ist eigentlich eine Programmiersprache: es gibt Variablen, Schleifen, Verzweigungen und so weiter.“

Brian Kernighan

In den verschiedenen Shells werden unterschiedliche Skriptsprachen verwendet.

Obwohl jede Shell die Möglichkeit besitzt, Shellskripte auszuführen, wird der Begriff Shellskript überwiegend für Unix-Shell-Skripte verwendet. Dieser Artikel bezieht sich daher auf Skripte in unixähnlichen Systemen.

Bei Kommandozeileninterpretern von DOS, wie z. B. COMMAND.COM oder 4DOS, die technisch gesehen ebenfalls Shells sind, werden Skripte als „Batch-Dateien“ bezeichnet. Bei der PowerShell von Microsoft heißen sie „PowerShell-Skripte“.[2]

Kompatibilität verschiedener Unix-Shells untereinander

Da unterschiedliche Unix-Shells, wie z. B. die Bash oder die C-Shell, nicht die gleiche Syntax nutzen, ist ein Shellskript in der Regel nur für eine spezifische Shell nutzbar.

Folgende Unix-Shells nutzen eine gemeinsame Syntax-Grundlage:

Bourne-kompatible Shells
C shell-kompatible Shells
  • csh
  • tcsh
Thompson-Shell-kompatible Shells
  • osh
Z shell-kompatible Shells
  • zsh

Aufbau

In der ersten Zeile eines Shellskripts – auch Header genannt – wird festgelegt, welcher Interpreter das Skript abarbeiten soll. Ein Shellskript beginnt daher mit dem sogenannten Shebang, #!, gefolgt von der Pfadangabe zur Shell, die das Script interpretieren soll.[5] Wird diese Zeile weggelassen, so wird das Script von jener Shell interpretiert, die auch neu erstellten Benutzerkonten standardmäßig zugewiesen wird. Welche konkret das ist, hängt ab vom verwendeten System und dessen Voreinstellung.

Das folgende Beispiel zeigt ein einfaches Shellscript in POSIX-Syntax mit einer for-Schleife (loop). Die Anzahl der Durchläufe wird durch die Anzahl an Werten bestimmt; hier drei: 'Alfa Romeo', 'Bentley', 'Citroën'. Zum besseren Verständnis sind alle Werte hier in Anführungszeichen gesetzt, dies ist aber nur bei 'Alfa Romeo' notwendig, da darin ein Leerzeichen vorkommt. Ohne die Anführungszeichen würden dabei zwei Werte interpretiert werden: Alfa und Romeo. Zu beachten ist, dass die Anführungszeichen nicht Teil des Wertes sind.

Bei jedem Durchlauf wird die Variable i neu gefüllt und ihr Inhalt dann in die Standardausgabe geschrieben (stdout, siehe Standard-Datenströme). Beim ersten Durchlauf wird die Variable mit Alfa Romeo gefüllt, beim zweiten mit Bentley, beim dritten mit Citroën. Dann endet die Schleife, da es keinen weiteren Wert gibt.

#!/bin/sh

for i in 'Alfa Romeo' 'Bentley' 'Citroën'; do
    echo $i
done

Das Auslesen der Variable i erfolgt indem ein Dollarzeichen davor geschrieben wird: $i.

Da das Programm echo schlicht alles ausgibt, was dahinter geschrieben steht (abgesehen Kommentare), ist es an dieser Stelle nicht nötig, die Variable in doppelte Anführungszeichen zu setzen. Soll der Wert der Variable aber anderweitig verwendet werden, müssen doppelte Anführungszeichen verwendet werden ("$i"), damit aus Werten wie Alfa Romeo nicht doch noch mehrere Werte werden. Würden dann einfache Anführungszeichen verwendet werden ('$i'), würde nicht der Inhalt der Variable ausgegeben, sondern die Zeichenkette $i unverändert als solches.

Besonderheiten

Operatoren, Funktionen und Leerzeichen

Eine Besonderheit, im Gegensatz zu anderen Programmiersprachen, ist die zwingende Verwendung von Leerzeichen beim Aufruf von Operatoren und Funktionen.[6]

Beispiele:

# Korrekte Schreibweise für einen Vergleich der Zahlen 1 und 5:
if (( 1 == 5 ));
    then echo "1 und 5 sind gleich"
else
    echo "false"
fi

# Inkorrekte Schreibweise:
# Die Test-Funktion "((" wird vom Interpreter nicht erkannt, da das Leerzeichen vor der "1" fehlt.
if ((1 == 5 ));

# Inkorrekte Schreibweise:
# Der Vergleichsoperator "==" wird vom Interpreter nicht erkannt, da die Leerzeichen vor und nach "==" fehlen.
if (( 1==5 ));

Eine weitere Besonderheit von Shellskript ist, dass die Zahl 0 wahr (englisch true) entspricht, während Zahlen größer als 0 falsch (englisch false) entsprechen. In anderen Programmiersprachen wie zum Beispiel C, Java oder Python und auch in der Logik ist der Wahrheitswert genau andersherum definiert. Der Grund liegt darin, dass die Shell oft Rückgabewerte von aufgerufenen Programmen auswerten muss. Eine Rückgabe von 0 entspricht dabei einem fehlerfreien Aufruf des Programms.[7]

Ausführen eines Shellskripts

Aufruf in der Unix-Shell

Standardmäßig sind neu erstellte Dateien unter Unix nicht ausführbar. Um ein Shellskript ausführen zu können, muss es über die Zugriffsrechte auf „ausführbar“ gesetzt werden. Dies geschieht durch den Befehl chmod.

chmod +x script.sh

Soll das Shellskript von einem beliebigen Pfad aus ausgeführt werden, muss der komplette Pfad zum Shellskript angegeben werden.

Beispiel: Das Shellskript /usr/local/bin/script.sh soll ausgeführt werden. Es muss folgender Befehl eingegeben werden:

/usr/local/bin/script.sh

Falls das Shellskript im aktuellen Arbeitsverzeichnis (englisch „working directory“) gespeichert ist und dort ausgeführt werden soll, geschieht dies durch Voranstellen des aktuellen Pfads ./:

./script.sh

Ausführungsort

Das Arbeitsverzeichnis des Shellskripts ist der Pfad, von dem aus es aufgerufen wird, also nicht der Ort, wo es sich selbst befindet.

Dateiendung

Die Dateiendung eines Shellskripts ist in der Regel .sh. Jedoch muss keine Dateiendung verwendet werden, da diese bei unixoiden Systemen keinerlei technische Bedeutung besitzt und nur dem Benutzer als Erkennungsmerkmal dient.

MIME-Typ

Neben application/x-shellscript findet sich noch der MIME-Typ application/x-sh. Das Unix-Programm file --mime-type gibt den Typ text/x-shellscript aus.

Literatur

  • Brian W. Kernighan: The UNIX Programming Environment. Prentice Hall, 1984, ISBN 0-13-937699-2

Einzelnachweise

  1. Brian W. Kernighan: The UNIX Programming Environment. Prentice Hall, 1984, ISBN 0-13-937699-2, Kapitel 3: Using the Shell, S. 94.
  2. itworld.com
  3. bash gnu.org
  4. ubuntuusers.de/Dash
  5. Bash Shell Scripting. Wikibooks (englisch)
  6. opensource.com
  7. linuxacademy.com