2.6 Bash

Wenn wir uns über SSH mit dem Server verbinden, landen wir automatisch in der Bourne-again shell (Bash). Die Bash ist der Kommandozeileninterpreter des Terminalfensters unseres Linux-Servers.

Bash steht für "Bourne-again shell" und ist eine verbesserte Version der ursprünglichen Unix-Shell, der Bourne-Shell (sh) von Stephen Bourne. Die Bash wurde 1989 entwickelt, um die Funktionalität der Bourne-Shell zu erweitern und gleichzeitig kompatibel mit dieser zu bleiben. Sie bietet interaktive Kommandozeilenfunktionen und Skripting-Fähigkeiten, die das Automatisieren von Aufgaben und die Verwaltung von Systemen erleichtern. Die Bash ist heute die am weitesten verbreitete Shell in der Unix-Welt und wird auf den meisten Linux-Systemen standardmäßig verwendet.

Die Bash ist also ein Kommandozeileninterpreter, der die vom Benutzer eingegebenen Befehle liest und ausführt.

Grundlegende Bash-Konzepte

Einige Bash-Konzepte kennen wir bereits.

  1. Pipelines ermöglichen es, die Ausgabe eines Befehls direkt als Eingabe für einen anderen Befehl zu verwenden, was durch das |-Zeichen erreicht wird.

    Beispiel

    ls -l | grep ".txt"
    

    Dieser Befehl listet alle Dateien im aktuellen Verzeichnis auf und filtert nur die Dateien, die ".txt" im Namen enthalten.

  2. Umleitungen verwenden >, >>, <, 2> und &> Zeichen, um die Standardausgabe, Standardeingabe und Fehlerausgabe umzuleiten.

    Beispiel

    echo "Text in Datei" > datei.txt
    cat datei.txt
    

    Hier wird der Text "Text in Datei" in datei.txt geschrieben, und der Inhalt der Datei wird anschließend mit cat angezeigt.

  3. Job-Kontrolle in der Bash ermöglicht es, Prozesse im Hintergrund (&) oder Vordergrund (fg) laufen zu lassen und laufende Jobs zu verwalten (jobs).

    Beispiel

    sleep 100 &
    jobs
    fg %1
    

    Der Befehl sleep 100 & startet den sleep-Prozess im Hintergrund. Mit jobs werden alle laufenden Jobs angezeigt und fg %1 holt den ersten Job in den Vordergrund.

  4. Aliase sind Kurzbefehle, die längere Befehle oder Befehlskombinationen abkürzen.

    Beispiel

    Hier ein Alias zu einem komplexeren Befehl alias counthtml='find /var/www/html -type f -name "*.html" | wc -l'.

    Wir können nach der Definition in die Kommandozeile einfach counthtml schreiben und damit den gesamten Befehlt ausführen. Aber dieser Alias ist nur bis zum nächsten Ausloggen definiert. Um den Alias dauerhaft verwenden zu können, müssen wir die Datei .bashrc editieren, die im Heimatverzeichnis eines jeden Users liegt.

    Hierzu die Konfigurationsdatei öffen nano ~/.bashrc und ans Ende der Datei den o.g. Alias schreiben.

    Um die neue Konfiguration .bashrc der Bash bekannt zu geben, muss man diese mit source ~/.bashrc aufrufen.

    Nerd-Wissen: man kann mit Hilfe von echo und der richtigen Umleitung einfach den Alias-Befehl ans Ende der .bashrc schreiben. Probieren Sie es aus, aber machen Sie sich vorher ein Backup der Datei.

  5. Variablen in der Bash werden verwendet, um Werte zu speichern, die später im Skript oder in der Kommandozeile verwendet werden können. Variablen werden ohne Leerzeichen um das Gleichheitszeichen definiert.

    Beispiel

    benutzername="student"
    echo $benutzername
    

    Hier wird die Variable benutzername auf "student" gesetzt und dann mit echo ausgegeben. Beachten Sie, dass beim Aufrufen der Variablen das $-Zeichen verwendet wird.

  6. Umgebungsvariablen sind spezielle Variablen, die vom System verwendet werden, um Informationen über die Systemumgebung zu speichern. Beispiele sind PATH, HOME und USER.

    Beispiel

    echo $PATH
    echo $HOME
    echo $USER
    

    Diese Befehle zeigen die Werte der Umgebungsvariablen PATH, HOME und USER an.

  7. Skripte sind Dateien, die eine Reihe von Bash-Befehlen enthalten und ausgeführt werden können, um Aufgaben zu automatisieren.

    Beispiel

    Erstellen Sie eine Datei namens skript.sh mit folgendem Inhalt:

    #!/bin/bash
    echo "Dieses Skript wird ausgeführt"
    benutzername="student"
    echo "Hallo, $benutzername"
    

    Machen Sie die Datei ausführbar mit chmod +x skript.sh und führen Sie sie dann aus mit ./skript.sh.

Programmieren in Bash-Scripten

Wir wollen hier nicht ins Detail gehen und es soll nur gezeigt werden, dass die Bash-Scripte sehr mächtig sein können.

Wichtig ist, dass in der ersten Zeile #!/bin/bash steht, da damit beim Aufrufen des Programms die Bash ausgeführt wird.

Es gibt viele gängige Anweisungen, wie z.B. if, for, while und Funktionen.

  • if-Anweisungen

    #!/bin/bash
    if [ $1 -gt 10 ]; then
        echo "Die Zahl ist größer als 10."
    else
        echo "Die Zahl ist 10 oder kleiner."
    fi
    
  • for-Schleifen

    #!/bin/bash
    for i in {1..5}; do
        echo "Nummer $i"
    done
    
  • while Schleifen

    #!/bin/bash
    counter=1
    while [ $counter -le 5 ]; do
        echo "Counter: $counter"
        ((counter++))
    done
    
  • Lesen von Benutzereingaben

    #!/bin/bash
    echo "Wie ist dein Name?"
    read NAME
    echo "Hallo, $NAME!"
    
  • Funktionen

    #!/bin/bash
    meine_funktion() {
    echo "Dies ist eine Funktion."
    }
    
    meine_funktion  # Ruft die Funktion auf
    

Bash-Skripte und Crontab

Eine wichtige Eigenschaft von Bash-Skripten ist der direkte Aufruf von Linux-Befehlen, die man dann in der Crontab wiederum automatisieren kann. Hier ein Beispiel:

#!/bin/bash

# Verzeichnis, das gesichert werden soll
SOURCE_DIR="/home/user/daten"

# Verzeichnis, in das das Backup gespeichert werden soll
BACKUP_DIR="/home/user/backup"

# Dateiname des Backups (aktuelles Datum hinzufügen)
BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz"

# Erstellen des Backup-Verzeichnisses, falls es nicht existiert
mkdir -p $BACKUP_DIR

# Erstellen des Backups
tar -czf $BACKUP_FILE $SOURCE_DIR

# Ausgabe einer Bestätigung
echo "Backup von $SOURCE_DIR wurde in $BACKUP_FILE erstellt."
  • Machen Sie das Skript ausführbar mit chmod +x backup.sh
  • Automatisierung mit crontab -e:
  • Fügen Sie die folgende Zeile hinzu, um das Skript jeden Tag um 2 Uhr morgens auszuführen: 0 2 * * * /home/user/backup.sh
  • Diese Zeile im crontab-Editor plant die tägliche Ausführung des Skripts backup.sh um 2 Uhr morgens.
Nerd-Wissen Cron-Scripting

Die Zeile 0 2 * * * /home/user/backup.sh im crontab-Editor bedeutet, dass das Skript backup.sh jeden Tag um 2 Uhr morgens ausgeführt wird.

  • 0: Minute (0. Minute der Stunde)
  • 2: Stunde (2. Stunde des Tages, also 2 Uhr morgens)
  • *: Tag des Monats (jeder Tag des Monats)
  • *: Monat (jeder Monat)
  • *: Wochentag (jeder Wochentag)

Das Skript /home/user/backup.sh wird somit täglich um 2:00 Uhr morgens ausgeführt.