Bash-Skripting: Alles, was Du wissen musst

Scripting bietet Dir die Möglichkeit, deine täglichen Abläufe zu vereinfachen und zu optimieren. Bash-Skripte (Akronym für Bourne Again Shell) sind sehr leistungsstarke und nützliche Werkzeuge für die Entwicklung.

Es handelt sich um einen Kommandozeilen-Interpreter für Unix- und Linux-Systeme. Er wurde 1989 von Brian Fox für das GNU-Projekt entwickelt, um die ursprüngliche Bourne Shell zu ersetzen, und brachte signifikante Verbesserungen in Bezug auf Funktionen und Kompatibilität.

Die Bedeutung von Bash in der Systemadministration und Softwareentwicklung kann nicht unterschätzt werden. Es ermöglicht die Automatisierung sich wiederholender Aufgaben, die Verwaltung großer Systeme und erleichtert die Entwicklung komplexer Skripte für verschiedene Anwendungen.

Die Grundlagen des Bash-Scripting

Bash-Scripting ist eine wesentliche Fähigkeit für jeden, der mit Unix- oder Linux-Systemen arbeitet.

Bash und Bang: Einführung in Shebang

Das erste Schlüsselelement jedes Bash-Skripts ist die Shebang-Zeile. Sie teilt dem System mit, welchen Interpreter es zur Ausführung des Skripts verwenden soll.

#!/bin/bash

Das #! ist als Shebang bekannt, und /bin/bash gibt den Pfad zum Bash-Interpreter an. Diese Zeile ist entscheidend, da sie sicherstellt, dass das Skript von Bash interpretiert wird, auch wenn andere Shells auf dem System vorhanden sind.

Erster Schritt: Hello World!

Erstelle mit Deinem bevorzugten Texteditor eine Datei namens hello.sh, füge den folgenden Inhalt hinzu und speichere sie:

#!/bin/bash
echo "Hello World!"

Ein Skript ausführbar machen

Standardmäßig hat eine Textdatei keine Berechtigungen, um wie ein Programm ausgeführt zu werden. Um Dein Skript ausführbar zu machen, musst du den folgenden Befehl verwenden, um die Berechtigungen zu ändern:

chmod +x hello.sh

Dann kannst Du die Berechtigungen mit dem folgenden Befehl überprüfen:

ls -l hello.sh

Ausführung eines Skripts

Um das Skript auszuführen, gibt es mehrere Möglichkeiten:

  • Relativer Pfad:
./hello.sh
  • Verwendung der Bash-Shell:
bash hello.sh
  • Über die sh-Shell, kann aber zu unterschiedlichen Verhaltensweisen führen, wenn das Skript bash-spezifische Funktionen verwendet:
sh hello.sh

Grundlegende Befehle

Bash-Scripting basiert auf der effizienten Nutzung einer Vielzahl von Befehlen, um einfache und komplexe Aufgaben zu erledigen. Hier sind einige häufig verwendete Befehle zum Navigieren und Verwalten des Dateisystems:

  • Dateien und Ordner im aktuellen Verzeichnis auflisten
ls
  • Verzeichnis wechseln
cd /path/to/directory
  • Aktuelles Verzeichnis anzeigen
pwd
  • Eine leere Datei erstellen oder den Zeitstempel einer bestehenden Datei aktualisieren
touch newfile.txt
  • Dateien oder Ordner löschen
rm file.txt

Kombination von Befehlen

Bash-Skripte werden mächtig, wenn Du Befehle kombinierst, um komplexere Aufgaben zu erledigen. Hier sind einige Beispiele:

  • Verwendung von „;“ zum Ausführen mehrerer Befehle in einer Sequenz
cd /path/to/directory; ls; pwd
  • Ausgabeumleitung: Verwende >, um die Ausgabe eines Befehls in eine Datei umzuleiten, oder >>, um zu einer bestehenden Datei hinzuzufügen
echo "Hello, World!" > hello.txt
echo "Hello again!" >> hello.txt
  • Verwendung von Pipe ( | ), um die Ausgabe eines Befehls als Eingabe für einen anderen Befehl zu verwenden
ls -l | grep ".txt"

Variablen und Substitution

  • Erklärung einer Variablen und deren Nutzung mit $
NAME=”Alice”
echo “Hello, $NAME!”
  • Verwendung der Substitution, um die Ausgabe eines Befehls als Variable zu verwenden
DATE=$(date)
echo "Today's date is $DATE"

Beachte, dass dieses Beispiel häufig bei der Erstellung von Logs verwendet wird.

Pfadverwaltung

Das Verständnis und die Verwaltung von Dateipfaden sind unerlässlich, um effizient im Dateisystem zu navigieren und robuste Skripte zu schreiben.

Absoluter Pfad vs relativer Pfad

Image
Absolut
Image
Relativ
Gibt den vollständigen Pfad zu einer Datei oder einem Verzeichnis vom Stammverzeichnis des Dateisystems an. Gibt den Pfad zu einer Datei oder einem Verzeichnis relativ zum aktuellen Verzeichnis an.
Beispiel: /home/user/documents/report.txt Beispiel: documents/report.txt

Zugehörige Befehle

Um Dateien und Befehle zu lokalisieren, stehen in Bash mehrere Tools zur Verfügung:

  • Den Speicherort eines ausführbaren Programms finden
which bash
  • Ort von Binärdateien, Quellcodes und zugehörigen Dokumentationen zu einem Befehl
whereis bash
  • Dateien und Ordner durchsuchen
find /home/user -name "report.txt"

Umgebungsvariablen

Umgebungsvariablen sind Schlüssel-Wert-Paare, die das Verhalten von Systemprozessen beeinflussen. Hier sind die gebräuchlichsten:

  • $PATH: enthält eine Liste von Verzeichnissen, in denen das System nach ausführbaren Dateien sucht. Um es zu ändern, verwende den folgenden Befehl
export PATH=$PATH:/new/directory/path
  • $HOME: stellt das persönliche Verzeichnis des Benutzers dar
echo $HOME
cd $HOME
  • $PWD: gibt das aktuelle Arbeitsverzeichnis an
echo $PWD
  • $USER: enthält den aktuellen Benutzernamen
echo $USER

Fluss- und Logikkontrolle

Fluss- und Logikkontrolle sind wesentliche Elemente des Bash-Scripting und ermöglichen das Schreiben dynamischer und anpassungsfähiger Skripte.

Bedingte Anweisungen

Sie ermöglichen die Ausführung von Code basierend auf bestimmten Bedingungen. Hier ist ein Beispiel für die Verwendung von if…elif…else.

#!/bin/bash
echo "Entrez un nombre : "
read number
if [ $number -gt 10 ]; then
    echo "Le nombre est plus grand que 10."
elif [ $number -eq 10 ]; then
    echo "Le nombre est égal à 10."
else
    echo "Le nombre est plus petit que 10."
fi

Schleifen

Schleifen werden verwendet, um Befehle mehrmals zu wiederholen.

  • for
for i in 1 2 3 4 5; do
    echo "Compteur : $i"
done
  • while
count=1
while [ $count -le 5 ]; do
    echo "Compteur : $count"
    ((count++))
done
  • until
count=1
until [ $count -gt 5 ]; do
    echo "Compteur : $count"
    ((count++))
done

Einige nützliche Skripte und Best Practices

Beispielscripte

  • Backup-Skript: Kopiert Dateien von einer Quelle an ein Ziel
#!/bin/bash
# Ce script effectue une sauvegarde des fichiers
src="/home/user/documents"
dest="/backup/documents"

if [ ! -d $dest ]; then
    mkdir -p $dest
fi

for file in $src/*; do
    if [ -f $file ]; then
        cp $file $dest
        echo "Copié $file vers $dest"
    fi
done
  • Bereinigung: Löschen von Elementen in einem temporären Verzeichnis
#!/bin/bash
dir="/home/user/temp"
echo "Nettoyage du répertoire $dir"

for file in $dir/*; do
    if [ -f $file ]; then
        rm $file
        echo "Supprimé $file"
    fi
done

Einige Best Practices

1. Kommentiere: Dies macht die Skripte lesbarer und verständlicher.

2. Benenne deine Variablen aussagekräftig. Vermeide Variablennamen wie $var1, $var2 oder $tmpvar.

3. Fehlerbehandlung: Verwende Bedingungen, um den Erfolg zu überprüfen und Fehler angemessen zu erfassen.

4. Modularisiere deinen Code durch den Einsatz von Funktionen, insbesondere wenn das Skript mehrere Operationen ausführt, zum Beispiel:

backup_files() {
    # Code pour effectuer la sauvegarde
}

5. Debugge, um Fehler zu identifizieren. Hier sind nützliche Befehle dafür

#!/bin/bash
set -x # Active le mode trace, affichant chaque commande et son résultat
# Code du script

#!/bin/bash
set -e # Arrête le script en cas d’erreur
# Code du script

echo "Début du script" # Utilisation de echo à des points stratégiques du scripts pour vérifier les sorties et suivre les flux d’exécution

Fazit

Das Bash-Scripting ist ein leistungsfähiges Werkzeug zur Automatisierung und Vereinfachung von Aufgaben auf Unix- und Linux-Systemen. Durch das Beherrschen der Grundlagen, der grundlegenden Befehle, der Pfadverwaltung, der Flusskontrolle und Best Practices kannst du robuste und effektive Skripte schreiben, um deine tägliche Produktivität zu verbessern.