Shell-Skripting (bash)
Ein Shell-Skript ist eine Textdatei mit einer Liste von Shell-Befehlen und wird wie ein Programm ausgeführt, um eine Aufgabe oder eine Reihe von Aufgaben zu erfüllen. Das Hauptziel eines Shell-Skripts ist es, Aufgaben zu automatisieren und Zeit zu sparen. Es ist wichtig, die grundlegende Struktur eines Shell-Skripts zu verstehen, da man über Shell-Skripte mit einem Computer-Cluster interagiert (siehe nächstes Kapitel über Grid Engine)
Was ist Bash?
Es gibt viele verschiedene Shells in Unix-ähnlichen Systemen. Die Bourne Again Shell (Bash) ist eine von ihnen, sie ist die Standardshell auf GNU/Linux-Systemen. Sie hat einige Vorteile gegenüber anderen Shells und ist so ziemlich die Standard-Shell, und wir werden im Folgenden zeigen, wie man sie für Skripte verwendet.
Ein einfaches Bash-Shell-Skript schreiben
Ein einfaches Shell-Skript ist nur eine Reihe von Befehlen. Das werden wir im Folgenden zeigen.
Schreiben wir ein einfaches Skript, das mit dem Befehl echo
„hello world“ auf dem Bildschirm ausgibt. Wir speichern die Textdatei als myScript.sh
#!/bin/bash echo Hello World
Ausführen einer Shell-Skript-Syntax:bash your-script-name
. In unserem Fall schreiben wir:
$ bash myScript.sh Hello World
komplizierteres Beispiel
Lassen Sie uns ein etwas komplizierteres Skript schreiben, das mehr Shell-Befehle verwendet. Das Skript benutzt ls
, um die Dateien aufzulisten, und verwendet den Befehl wc -l
, der die Anzahl der Zeilen in einer bestimmten Datei oder Standardeingabe zählt. In diesem Fall zählt wc -l
die Anzahl der Zeilen in der Ausgabe von ls -l
. All dies wird durch die Verwendung der Pipe |
erreicht.
Inhalt von script.sh:
#!/bin/bash echo here are the list of files ls -l echo The number of files: ls -l | wc -l
Wir können es wie folgt ausführen:
$ bash script.sh
Variablen in Bash-Skripten
Sie können auch Variablen in Bash-Skripten verwenden. Diese sind nützlich, um die Ausgabe von Zwischenbefehlen zu erfassen und sie für die Ausführung anderer Befehle zu verwenden.Es gibt keine Datentypen für Variablen. Eine Variable in der Bash kann eine Zahl, ein Zeichen oder eine Zeichenkette enthalten.
Sie müssen eine Variable nicht deklarieren, es genügt, ihr einen Wert zuzuweisen, um sie zu erstellen.
Nun werden wir ein einfaches Skript mit einer Variablen erstellen. Wir werden dieser Variablen einen Hello world
String zuweisen und die Variable mit echo
ausgeben.
#!/bin/bash VAR="Hello world" echo $VAR
Bei der Zuweisung der Variablen haben wir das $
-Zeichen nicht verwendet, aber bei der Verwendung der Variablen mussten wir das $
-Zeichen verwenden.
Befehlszeilenargumente in Bash-Skripten
Das Skript kann auch Befehlszeilenargumente annehmen. Hier ändern wir das Skript, das die Datei auflistet, um ein Kommandozeilenargument zu akzeptieren. Das Argument wird ein Pfad zu einem Verzeichnis sein.
Inhalt von script2.sh:
#!/bin/bash VAR= echo here are the list of files ls -l $VAR echo The number of files: ls -l $VAR | wc -l
So führen Sie das Skript aus:
$ bash script2.sh /home/user/project
Die Argumente werden in Variablen mit einer Nummer in der Reihenfolge des Arguments gespeichert, beginnend bei 1
- Erstes Argument: $1
- Zweites Argument: $2
- und so weiter…
In unserem Fall entspricht dem
/home/user/project
.
Rechenoperationen in Bash-Skripten
Rechenoperationen mit ganzen Zahlen in Bash werden im folgenden Format ausgeführt:
#!/bin/bash x=6 y=2 $((10 - 5)) $((x-y)) echo $((x-y)) echo $((10-5))
Sie können diese Befehle auch per Copy-Paste in die Konsole eingeben, um zu sehen, wie sie funktionieren. Die echo
-Befehle sollten 4
und 5
ausgeben.
Die Bash-Arithmetik unterstützt keine Fließkommazahlen (z.B. funktioniert die Operation 1.3 -1 nicht in der Bash), Sie müssen den bc
-Befehl verwenden. Ein Beispiel für die Verwendung von bc
finden Sie in diesem StackOverflow-Beispiel.
Looping over files
Wenn Sie versuchen, eine Aufgabe mithilfe von Bash-Skripten zu automatisieren, ist es sehr wahrscheinlich, dass Sie bestimmte Befehle auf jede Datei in einem Verzeichnis anwenden müssen. Dies kann mit Platzhalterzeichen*
und for
-Schleifen erreicht werden. Das folgende Skript speichert alle ‚.txt‘-Dateien im Verzeichnis /path/to
in der Variablen FILES
. Dann berechnet es für jede Datei die Anzahl der Zeilen und gibt diese mit dem Befehl wc -l
aus.
#!/bin/bash FILES=/path/to/*.txt for f in $FILES do echo "Processing $f file..." # count number of lines and output that for file $f wc -l $f done
Mehr über Bash-Skripte
Sie können noch kompliziertere Shell-Skripte schreiben, indem Sie Kontrollstrukturen (if/else, for/while-Schleifen) verwenden und vieles nur mit Hilfe von Shell-Skripten erreichen, aber das würde den Rahmen dieses Dokuments sprengen. Schauen Sie sich die Links unten an, wenn Sie besser im Schreiben von Shell-Skripten werden wollen.
- http://www.freeos.com/guides/lsst/
- http://www.tldp.org/LDP/Bash-Beginners-Guide/html/