78 Dokumentationen verfügbar

Wissensdatenbank

Bash Scripting Grundlagen

Zuletzt aktualisiert: 11.01.2026 um 12:06 Uhr

Bash Scripting Grundlagen

Bash-Skripte automatisieren wiederkehrende Aufgaben auf Linux-Systemen. Von einfachen Befehls-Ketten bis zu komplexen Automatisierungen - Bash ist das Schweizer Taschenmesser der Systemadministration.

Erstes Skript

#!/bin/bash
# mein-skript.sh

echo "Hallo Welt!"
echo "Heute ist $(date)"
# Ausführbar machen
chmod +x mein-skript.sh

# Ausführen
./mein-skript.sh

Variablen

#!/bin/bash

# Variablen setzen (kein Leerzeichen um =)
NAME="Max"
ALTER=25

# Variablen verwenden
echo "Name: $NAME"
echo "Alter: ${ALTER} Jahre"

# Befehlsausgabe speichern
DATUM=$(date +%Y-%m-%d)
HOSTNAME=$(hostname)

# Umgebungsvariablen
echo "Home: $HOME"
echo "User: $USER"
echo "PWD: $PWD"

Benutzereingabe

#!/bin/bash

echo "Wie heißt du?"
read NAME

echo "Hallo $NAME!"

# Mit Prompt
read -p "Dein Alter: " ALTER
echo "Du bist $ALTER Jahre alt"

# Passwort (versteckt)
read -sp "Passwort: " PASS

Bedingungen (if)

#!/bin/bash

ZAHL=10

if [ $ZAHL -gt 5 ]; then
    echo "Größer als 5"
elif [ $ZAHL -eq 5 ]; then
    echo "Gleich 5"
else
    echo "Kleiner als 5"
fi

# Datei prüfen
if [ -f "/etc/passwd" ]; then
    echo "Datei existiert"
fi

# Verzeichnis prüfen
if [ -d "/var/www" ]; then
    echo "Verzeichnis existiert"
fi

# String-Vergleich
if [ "$NAME" == "Max" ]; then
    echo "Hallo Max!"
fi

Vergleichsoperatoren

Operator Bedeutung
-eq Gleich (equal)
-ne Ungleich (not equal)
-gt Größer (greater than)
-lt Kleiner (less than)
-f Datei existiert
-d Verzeichnis existiert
-z String ist leer

Schleifen

For-Schleife

#!/bin/bash

# Liste durchlaufen
for NAME in Max Anna Tom; do
    echo "Hallo $NAME"
done

# Zahlenbereich
for i in {1..5}; do
    echo "Nummer: $i"
done

# Dateien durchlaufen
for FILE in /var/log/*.log; do
    echo "Log: $FILE"
done

While-Schleife

#!/bin/bash

COUNTER=1
while [ $COUNTER -le 5 ]; do
    echo "Durchlauf: $COUNTER"
    ((COUNTER++))
done

# Datei zeilenweise lesen
while read LINE; do
    echo "$LINE"
done < /etc/hosts

Funktionen

#!/bin/bash

# Funktion definieren
backup_erstellen() {
    local QUELLE=$1
    local ZIEL=$2
    
    echo "Backup von $QUELLE nach $ZIEL..."
    cp -r "$QUELLE" "$ZIEL"
    echo "Fertig!"
}

# Funktion aufrufen
backup_erstellen /var/www /backup/www

Parameter

#!/bin/bash

echo "Skript-Name: $0"
echo "Parameter 1: $1"
echo "Parameter 2: $2"
echo "Alle Parameter: $@"
echo "Anzahl: $#"

# Prüfen ob Parameter vorhanden
if [ -z "$1" ]; then
    echo "Verwendung: $0 <parameter>"
    exit 1
fi

Praktisches Beispiel: Backup-Skript

#!/bin/bash

# Variablen
BACKUP_DIR="/backup"
DATUM=$(date +%Y-%m-%d)
QUELLEN=("/var/www" "/etc" "/home")

# Backup-Verzeichnis erstellen
mkdir -p "$BACKUP_DIR/$DATUM"

# Backup durchführen
for QUELLE in "${QUELLEN[@]}"; do
    NAME=$(basename "$QUELLE")
    tar -czf "$BACKUP_DIR/$DATUM/$NAME.tar.gz" "$QUELLE" 2>/dev/null
    
    if [ $? -eq 0 ]; then
        echo "✓ $QUELLE gesichert"
    else
        echo "✗ Fehler bei $QUELLE"
    fi
done

# Alte Backups löschen (älter als 7 Tage)
find "$BACKUP_DIR" -type d -mtime +7 -exec rm -rf {} \;

echo "Backup abgeschlossen!"

Debugging

# Befehle anzeigen
bash -x mein-skript.sh

# Im Skript aktivieren
set -x  # Debug an
set +x  # Debug aus

# Bei Fehler abbrechen
set -e

Weitere Hilfe