Zum Inhalt

Woche 05

Skripting

In dieser Woche haben wir unsere ersten Skripte geschrieben. Skripte sind kleine Programme, die aus einer Abfolge von Befehlen bestehen und in einer Datei gespeichert werden. In unserem Fall sind das die Befehle, dir wir in den letzten Wochen erlernt haben.

Mein erstes Skript

Um unserer ersten Skript zu schreiben, öffnen wir den Editor vim

vim skript.sh
#!/usr/bin/env bash

# Die erste Zeile ist der sogenannte Shebang. Er gibt an, mit 
# welchem Programm das Skript ausgeführt werden soll.
# Da wir Bash verwenden, ist das /usr/bin/env bash

# Bis auf der Shebang, werden alle Kommentare in der Bash mit
# einem # eingeleitet. Das heißt, dass alles was nach einem #
# kommt, nicht ausgeführt wird.

echo "Hallo Welt!"

Nachdem wir das Skript gespeichert haben, müssen wir es noch ausführbar machen. Dafür haben wir in Woche 02 den Befehl chmod kennen gelernt.

chmod o+x skript.sh

Nun können wir unser Skript ausführen.

./skript.shHallo Welt!

Parameter

Skripte können, wie auch z.B. echo oder cat, Argumente entgegen nehmen. Diese Argumente werden in der Reihenfolge, wie sie übergeben werden in den Variablen $1, $2, $3, ... gespeichert. $0 enthält den Namen des Skripts.

Wir passen nun unser Skript an, so dass es zusätzlich die ersten beiden Argumente ausgibt.

#!/usr/bin/env bash

# Die erste Zeile ist der sogenannte Shebang. Er gibt an, mit 
# welchem Programm das Skript ausgeführt werden soll.
# Da wir Bash verwenden, ist das /usr/bin/env bash

# Bis auf der Shebang, werden alle Kommentare in der Bash mit
# einem # eingeleitet. Das heißt, dass alles was nach einem #
# kommt, nicht ausgeführt wird.

echo "Hallo Welt!"
echo "Parameter 1: $1"
echo "Parameter 2: $2"

Wir speichern das Skript und führen es aus.

./skript.sh Para1 Para2Hallo Welt!
Parameter 1: Para1
Parameter 2: Para2

Variablen

In der Bash gibt es, wie auch in Java, Variablen. Diese werden mit einem $ vor dem Variablennamen aufgerufen. Im vorherigen Skript haben wir das schon gesehen. Allerdings sind die Variablen $1 bis $9 spezielle Variablen, die die Parameter enthalten. Variablen, die wir selbst definieren, dürfen niemals mit einer Zahl beginnen.

Zu beachten ist, das zwischen der Variable und dem = kein Leerzeichen stehen darf und bei der Zuweisung der Variable kein $ vor dem Variablennamen steht.

Wir passen nun unser Skript an, so dass wir eine Variable definieren und diese ausgeben.

#!/usr/bin/env bash

# Die erste Zeile ist der sogenannte Shebang. Er gibt an, mit 
# welchem Programm das Skript ausgeführt werden soll.
# Da wir Bash verwenden, ist das /usr/bin/env bash

# Bis auf der Shebang, werden alle Kommentare in der Bash mit
# einem # eingeleitet. Das heißt, dass alles was nach einem #
# kommt, nicht ausgeführt wird.

echo "Hallo Welt!"
echo "Parameter 1: $1"
echo "Parameter 2: $2"

# Wir definieren eine Variable
meine_variable="Hallo Welt!"
echo "Das steht in meiner Variable: $meine_variable"

Wir speichern das Skript und führen es aus.

./skript.sh Para1 Para2Hallo Welt!
Parameter 1: Para1
Parameter 2: Para2
Das steht in meiner Variable: Hallo Welt!

while-Schleife

Wie auch in Java, gibt es in der Bash Schleifen. Die einfachste Schleife ist die while-Schleife. Mit Hilfe von cat und der Pipe | können wir mit dem neuen Befehl read eine Datei Zeile für Zeile einlesen.

1
2
3
4
5
#!/usr/bin/env bash

cat einDatei.txt | while read line; do
    echo "$line"
done

Die Datei "einDatei.txt" sieht wie folgt aus:

1
2
3
4
Zeile_1;Information_1;noch_eine_Information_1
Zeile_2;Information_2;noch_eine_Information_2
Zeile_3;Information_3;noch_eine_Information_3
Zeile_4;Information_4;noch_eine_Information_4
./skript.shZeile_1;Information_1;noch_eine_Information_1
Zeile_2;Information_2;noch_eine_Information_2
Zeile_3;Information_3;noch_eine_Information_3
Zeile_4;Information_4;noch_eine_Information_4

Rechnen in der Bash

Auch in der Bash ist es möglich zu rechnen. Dazu nutzen wir die $(( ))-Syntax. Innerhalb der Klammern können wir rechnen. Wir passen unser Skript an, so dass wir die Zeilennummer ausgeben.

1
2
3
4
5
6
7
#!/usr/bin/env bash

zeilennummer=1
cat einDatei.txt | while read line; do
    echo "$zeilennummer: $line"
    zeilennummer=$((zeilennummer+1))
done
./skript.sh1: Zeile_1;Information_1;noch_eine_Information_1
2: Zeile_2;Information_2;noch_eine_Information_2
3: Zeile_3;Information_3;noch_eine_Information_3
4: Zeile_4;Information_4;noch_eine_Information_4

if test

Mit Hilfe von if können wir in der Bash Bedingungen abfragen. Dazu nutzen wir den Befehl test. Wir passen unser Skript an, so dass wir nur die zweite Zeile ausgeben.

1
2
3
4
5
6
7
8
9
#!/usr/bin/env bash

zeilennummer=1
cat "test.txt" | while read line; do
    if test "$zeilennummer" = 2; then
        echo "$zeilennummer: $line"
    fi
    zeilennummer=$((zeilennummer+1))
done
./skript.sh2: Zeile_2;Information_2;noch_eine_Information_2