Bash Scripting Crash: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(16 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>
+
<pre>chmod +x mein_script.sh</pre>
  chmod +x mein_script.sh
 
  </pre>
 
 
- Führe das Skript aus:
 
- Führe das Skript aus:
  <pre>
+
<pre>./mein_script.sh</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 ==
Zeile 68: Zeile 72:
 
Es gibt zwei Arten von Schleifen in Bash: For-Schleifen und While-Schleifen.
 
Es gibt zwei Arten von Schleifen in Bash: For-Schleifen und While-Schleifen.
  
*For-Schleife:
+
===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:
+
===While-Schleife===
 
<pre>
 
<pre>
 
count=1
 
count=1
Zeile 86: Zeile 92:
 
</pre>
 
</pre>
  
* Die doppelten Klammern (( )) in Bash dienen dazu, arithmetische Operationen durchzuführen.
+
* 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.
 
* '''++''' ist der Post-Inkrement-Operator. Er erhöht den Wert von '''count''' um 1.
  
Zeile 103: 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"