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.
Shell-Skript | |
---|---|
![]() | |
![]()
| |
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 |
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.“
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-Skript“.[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:
- C shell-kompatible Shells
- csh
- tcsh
- Thompson-Shell-kompatible Shells
- osh
- Z shell-kompatible Shells
- zsh
Dateiformat
In der ersten Zeile des Shellskripts wird festgelegt, mit welcher Shell das Skript ausgeführt werden soll. Dies geschieht durch die Angabe des Dateipfades zum jeweiligen Shell-Programm. Innerhalb eines Shellskripts können Programme aufgerufen und Variable benutzt werden. Außerdem sind Verzweigungen und Schleifen möglich.
Ein Shellskript startet mit dem Shebang ("#!"), gefolgt von der Pfadangabe zur Shell.[5] Falls die erste Zeile (mit dem Shebang) weggelassen wird, wird das Skript jedoch meist trotzdem als Shellskript ausgeführt. Welche Shell standardmäßig hierfür genutzt wird, ist jedoch vom jeweiligen Unix-Derivat abhängig. Das Weglassen der Shebang-Zeile führt dazu, dass nicht gesichert werden kann, mit welcher Shell das Skript ausgeführt wird, und ist daher nicht empfohlen.
Die am meisten verbreitete Unix-Shell ist die Bash Shell. Daher wird im folgenden Beispielcode in der ersten Zeile ein Dateipfad verwendet, der auf die Bash Shell zeigt:
#!/bin/bash
# Shellskript für die Bash
for i in 0 1 2
do
echo $i
done
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:
- Test-Funktionen [ ] und (( ))
- Vergleichsoperatoren ==, <, >, <=, >=,!
# 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
Weblinks
- Bourne Shell Scripting. Wikibooks (englisch)
- Bash Shell Scripting. Wikibooks (englisch)
- C Shell Scripting. Wikibooks (englisch)
Einzelnachweise
- ↑ Brian W. Kernighan: The UNIX Programming Environment. Prentice Hall, 1984, ISBN 0-13-937699-2, Kapitel 3: Using the Shell, S. 94.
- ↑ itworld.com
- ↑ bash gnu.org
- ↑ ubuntuusers.de/Dash
- ↑ Bash Shell Scripting. Wikibooks (englisch)
- ↑ opensource.com
- ↑ linuxacademy.com