Bash Scripting Crash: Unterschied zwischen den Versionen
| (20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 9: | Zeile 9: | ||
echo "Hallo, Welt!" | echo "Hallo, Welt!" | ||
</pre> | </pre> | ||
| + | |||
| + | *'''#!''' ist das Shebang-Zeichen und teilt dem Betriebssystem mit, dass die folgende Datei mit einem bestimmten Interpreter ausgeführt werden soll. | ||
| + | *'''/bin/bash''' Der Pfad zur Bash-Shell, die das Skript ausführt. | ||
| + | * Ohne Shebang entscheidet der Aufruf über den benutzten Interpreter (z. B. bash script.sh oder Aufruf von der Bash aus) | ||
==Skript ausführbar machen == | ==Skript ausführbar machen == | ||
| Zeile 17: | Zeile 21: | ||
- Speichere das Skript, z.B. als `mein_script.sh`. | - Speichere das Skript, z.B. als `mein_script.sh`. | ||
- Mache das Skript ausführbar: | - Mache das Skript ausführbar: | ||
| − | + | <pre>chmod +x mein_script.sh</pre> | |
| − | |||
| − | |||
- Führe das Skript aus: | - Führe das Skript aus: | ||
| − | + | <pre>./mein_script.sh</pre> | |
| − | |||
| − | |||
==Variablen == | ==Variablen == | ||
| Zeile 63: | Zeile 63: | ||
fi | fi | ||
</pre> | </pre> | ||
| + | * '''[ ... ]''': Das ist ein Testkonstrukt (eine Alternative zu test), das Bedingungen überprüft. | ||
| + | * '''$num''': Die Variable num, deren aktueller Wert geprüft wird. | ||
| + | * '''-gt''': Ein Vergleichsoperator, der "greater than" (größer als) bedeutet. | ||
| + | * '''10''': Die Zahl, mit der der Wert von num verglichen wird. | ||
==Schleifen == | ==Schleifen == | ||
| − | Es gibt zwei Arten von Schleifen in Bash: | + | Es gibt zwei Arten von Schleifen in Bash: For-Schleifen und While-Schleifen. |
| − | + | ===For-Schleife=== | |
<pre> | <pre> | ||
for i in {1..5} | for i in {1..5} | ||
| Zeile 75: | Zeile 79: | ||
done | done | ||
</pre> | </pre> | ||
| + | * '''{ }''' nennt man Brace Expansion und erzeugt Listen, Sequenzen oder Textmuster. | ||
| + | * '''{1..5}''' erzeugt die Sequenz 1 2 3 4 5. | ||
| − | + | ===While-Schleife=== | |
<pre> | <pre> | ||
count=1 | count=1 | ||
| Zeile 85: | Zeile 91: | ||
done | done | ||
</pre> | </pre> | ||
| + | |||
| + | * Die doppelten Klammern '''(( ))''' in Bash dienen dazu, arithmetische Operationen durchzuführen. | ||
| + | * '''++''' ist der Post-Inkrement-Operator. Er erhöht den Wert von '''count''' um 1. | ||
==Funktionen == | ==Funktionen == | ||
| Zeile 100: | Zeile 109: | ||
greet "Bob" | greet "Bob" | ||
</pre> | </pre> | ||
| + | *'''greet()''': Definiert die Funktion greet. | ||
| + | *'''{ ... }''': Der Funktionskörper, der den Code enthält, der ausgeführt wird, wenn die Funktion aufgerufen wird. | ||
| + | |||
| + | ==Case Anweisung== | ||
| + | In Bash wird die case-Anweisung verwendet, um je nach Wert einer Variablen oder eines Ausdrucks unterschiedliche Aktionen auszuführen. | ||
| + | |||
| + | '''Beispiel:''' | ||
| + | <pre> | ||
| + | #!/bin/bash | ||
| + | echo "Gib eine Zahl zwischen 1 und 3 ein:" | ||
| + | read num | ||
| + | case "$num" in | ||
| + | 1) | ||
| + | echo "Du hast Eins eingegeben" | ||
| + | ;; | ||
| + | 2) | ||
| + | echo "Du hast Zwei eingegeben" | ||
| + | ;; | ||
| + | 3) | ||
| + | echo "Du hast Drei eingegeben" | ||
| + | ;; | ||
| + | *) | ||
| + | echo "Ungültige Zahl" | ||
| + | ;; | ||
| + | esac | ||
| + | </pre> | ||
| + | |||
| + | *Das ''';;''' ist notwendig, um jedes case-Block zu beenden. | ||
| + | *'''esac''' ist das umgekehrte von case und markiert das Ende des case-Blocks. | ||
| + | *Bash-case-Anweisungen sind groß-/kleinschreibungssensitiv, d. h. "apfel" und "Apfel" würden als unterschiedliche Werte behandelt, es sei denn, dies wird explizit berücksichtigt. | ||
==Befehlszeilenargumente == | ==Befehlszeilenargumente == | ||
Aktuelle Version vom 27. November 2024, 14:26 Uhr
Einführung
Grundstruktur eines Skripts
Ein Bash-Skript ist eine Textdatei, die eine Reihe von Befehlen enthält, die von der Bash-Shell ausgeführt werden. Jedes Skript beginnt mit der sogenannten Shebang-Zeile, die dem System mitteilt, dass das Skript mit der Bash-Shell ausgeführt werden soll.
Beispiel:
#!/bin/bash echo "Hallo, Welt!"
- #! ist das Shebang-Zeichen und teilt dem Betriebssystem mit, dass die folgende Datei mit einem bestimmten Interpreter ausgeführt werden soll.
- /bin/bash Der Pfad zur Bash-Shell, die das Skript ausführt.
- Ohne Shebang entscheidet der Aufruf über den benutzten Interpreter (z. B. bash script.sh oder Aufruf von der Bash aus)
Skript ausführbar machen
Um ein Skript auszuführen, musst du es ausführbar machen. Dies erfolgt mit dem Befehl `chmod`.
Schritte: - Speichere das Skript, z.B. als `mein_script.sh`. - Mache das Skript ausführbar:
chmod +x mein_script.sh
- Führe das Skript aus:
./mein_script.sh
Variablen
Variablen werden ohne Leerzeichen um das `=`-Zeichen deklariert. Der Wert einer Variablen wird mit `$` abgerufen.
Beispiel:
#!/bin/bash name="Alice" echo "Hallo, $name!"
Eingaben vom Benutzer lesen
Verwende den Befehl `read`, um Eingaben vom Benutzer zu erhalten.
Beispiel:
#!/bin/bash echo "Gib deinen Namen ein:" read name echo "Hallo, $name!"
Bedingte Anweisungen (if-else)
Mit `if`, `else` und `elif` kannst du bedingte Logik im Skript implementieren.
Beispiel:
#!/bin/bash
echo "Gib eine Zahl ein:"
read num
if [ $num -gt 10 ]; then
echo "Größer als 10"
else
echo "Kleiner oder gleich 10"
fi
- [ ... ]: Das ist ein Testkonstrukt (eine Alternative zu test), das Bedingungen überprüft.
- $num: Die Variable num, deren aktueller Wert geprüft wird.
- -gt: Ein Vergleichsoperator, der "greater than" (größer als) bedeutet.
- 10: Die Zahl, mit der der Wert von num verglichen wird.
Schleifen
Es gibt zwei Arten von Schleifen in Bash: For-Schleifen und While-Schleifen.
For-Schleife
for i in {1..5}
do
echo "Nummer: $i"
done
- { } nennt man Brace Expansion und erzeugt Listen, Sequenzen oder Textmuster.
- {1..5} erzeugt die Sequenz 1 2 3 4 5.
While-Schleife
count=1
while [ $count -le 5 ]
do
echo "Zähler: $count"
((count++))
done
- Die doppelten Klammern (( )) in Bash dienen dazu, arithmetische Operationen durchzuführen.
- ++ ist der Post-Inkrement-Operator. Er erhöht den Wert von count um 1.
Funktionen
Du kannst Funktionen erstellen, um wiederverwendbare Codeblöcke zu erstellen.
Beispiel:
#!/bin/bash
greet() {
echo "Hallo, $1!"
}
greet "Alice"
greet "Bob"
- greet(): Definiert die Funktion greet.
- { ... }: Der Funktionskörper, der den Code enthält, der ausgeführt wird, wenn die Funktion aufgerufen wird.
Case Anweisung
In Bash wird die case-Anweisung verwendet, um je nach Wert einer Variablen oder eines Ausdrucks unterschiedliche Aktionen auszuführen.
Beispiel:
#!/bin/bash
echo "Gib eine Zahl zwischen 1 und 3 ein:"
read num
case "$num" in
1)
echo "Du hast Eins eingegeben"
;;
2)
echo "Du hast Zwei eingegeben"
;;
3)
echo "Du hast Drei eingegeben"
;;
*)
echo "Ungültige Zahl"
;;
esac
- Das ;; ist notwendig, um jedes case-Block zu beenden.
- esac ist das umgekehrte von case und markiert das Ende des case-Blocks.
- Bash-case-Anweisungen sind groß-/kleinschreibungssensitiv, d. h. "apfel" und "Apfel" würden als unterschiedliche Werte behandelt, es sei denn, dies wird explizit berücksichtigt.
Befehlszeilenargumente
Du kannst auf Befehlszeilenargumente mit `$1`, `$2`, etc., oder mit `$@` für alle Argumente zugreifen.
Beispiel:
#!/bin/bash echo "Erstes Argument: $1" echo "Alle Argumente: $@"
Führe das Skript mit folgenden Argumenten aus:
./mein_script.sh arg1 arg2 arg3
Rückgabestatus
Jeder Befehl gibt einen Rückgabestatus-Code zurück (`0` für Erfolg, eine andere Zahl für Fehler). Du kannst den Rückgabestatus mit `$?` überprüfen.
Beispiel:
#!/bin/bash
echo "Datei zum ausgeben?: "
read file
cat $file
if [ $? -eq 0 ]; then
echo "Der Befehl war erfolgreich!"
else
echo "Der Befehl ist fehlgeschlagen!"
fi
Eingabe- und Ausgabeumleitung
Mit Bash kannst du Eingaben und Ausgaben umleiten: - Ausgabe umleiten mit `>` (überschreibt eine Datei) oder `>>` (hängt an eine Datei an). - Eingabe umleiten mit `<`.
Beispiel:
#!/bin/bash echo "Dies ist die Ausgabe" > output.txt # Überschreibt die Datei echo "Weitere Ausgabe" >> output.txt # Hängt an die Datei an
Fehlerbehandlung
Mit `set -e` kannst du das Skript so einstellen, dass es bei einem Fehler sofort beendet wird.
Beispiel:
#!/bin/bash set -e echo "Dies wird funktionieren" non_existent_command # Dies wird das Skript beenden echo "Dies wird nicht ausgeführt"