Skip to content

Projekt 4: Einfach Shell-Skripting einstieg

Projektbeschreibung

In diesem Projekt lernen wir die Grundlagen der Shell-Skriptprogrammierung, indem wir praktische Skripte erstellen.

Lernziele

  • Shell-Skriptgrundlagen verstehen
  • Variablen und Benutzereingaben verwenden
  • Bedingte Anweisungen und Schleifen verwenden
  • Skripte ausführbar machen und ausführen

Projektanforderungen

  1. Shell-Skriptformat und Ausführungsmethode verstehen
  2. Skript erstellen: Automatische Dateisicherung
  3. Skript erstellen: Benutzer批量创建
  4. Skriptberechtigungen konfigurieren und Testlauf durchführen

Schritt-für-Schritt-Anleitung

Schritt 1: Shell-Skriptgrundlagen

Skriptformat:

bash
#!/bin/bash
# Dies ist ein Kommentar
# Skriptanfang
befehl1
befehl2
# Skriptende

Skript ausführungsmethoden:

  1. Direkt ausführen (empfohlen):
    bash
    chmod +x skript.sh
    ./skript.sh
  2. Mit Bash ausführen:
    bash
    bash skript.sh
  3. Mit source ausführen (im aktuellen Shell-Kontext):
    bash
    source skript.sh
    # oder
    . skript.sh

Schritt 2: Skript 1 - Automatische Dateisicherung

Skript erstellen (autobackup.sh):

bash
vim autobackup.sh

Fügen Sie folgenden Inhalt hinzu:

bash
#!/bin/bash

# Skript: autobackup.sh
# Funktion: Automatische Dateisicherung

# Konfiguration
QUELLE="/home"
ZIEL="/backup"
DATUM=$(date +%Y%m%d_%H%M%S)
BACKUP_DATEI="$ZIEL/backup_$DATUM.tar.gz"

# Prüfen, ob Zielverzeichnis existiert
if [ ! -d "$ZIEL" ]; then
    echo "Zielverzeichnis existiert nicht. Erstelle $ZIEL..."
    mkdir -p "$ZIEL"
fi

# Backup erstellen
echo "Starte Backup von $QUELLE nach $BACKUP_DATEI..."
tar -czvf "$BACKUP_DATEI" "$QUELLE" 2>/dev/null

# Prüfen, ob Backup erfolgreich war
if [ $? -eq 0 ]; then
    echo "Backup erfolgreich abgeschlossen!"
    echo "Backup-Datei: $BACKUP_DATEI"
    echo "Größe: $(du -h "$BACKUP_DATEI" | cut -f1)"
else
    echo "Fehler beim Erstellen des Backups!"
fi

Skript ausführbar machen und testen:

bash
chmod +x autobackup.sh
./autobackup.sh

Schritt 3: Skript 2 - Benutzer批量创建

Skript erstellen (benutzer_erstellen.sh):

bash
vim benutzer_erstellen.sh

Fügen Sie folgenden Inhalt hinzu:

bash
#!/bin/bash

# Skript: benutzer_erstellen.sh
# Funktion: Mehrere Benutzer批量创建

# Prüfen, ob Skript als Root ausgeführt wird
if [ $UID -ne 0 ]; then
    echo "Dieses Skript muss als Root ausgeführt werden!"
    exit 1
fi

# Benutzerliste (durch Leerzeichen getrennt)
BENUTZER_LISTE="user1 user2 user3 user4 user5"

# Passwort für alle Benutzer (in Produktionsumgebung sollten individuelle Passwörter verwendet werden)
PASSWORT="StandardPasswort123"

echo "Starte Benutzererstellung..."

# Schleife für jeden Benutzer
for BENUTZER in $BENUTZER_LISTE; do
    # Prüfen, ob Benutzer bereits existiert
    if id "$BENUTZER" &>/dev/null; then
        echo "Benutzer $BENUTZER existiert bereits!"
    else
        # Benutzer erstellen
        useradd -m -s /bin/bash "$BENUTZER"
        
        # Passwort setzen
        echo "$BENUTZER:$PASSWORT" | chpasswd
        
        # Benutzer zur sudo-Gruppe hinzufügen (optional)
        usermod -aG sudo "$BENUTZER" 2>/dev/null || usermod -aG wheel "$BENUTZER" 2>/dev/null
        
        echo "Benutzer $BENUTZER wurde erfolgreich erstellt!"
    fi
done

echo "Benutzererstellung abgeschlossen!"
echo "Die folgenden Benutzer wurden erstellt:"
for BENUTZER in $BENUTZER_LISTE; do
    if id "$BENUTZER" &>/dev/null; then
        echo "  - $BENUTZER"
    fi
done

Skript ausführbar machen und testen:

bash
chmod +x benutzer_erstellen.sh
sudo ./benutzer_erstellen.sh

Schritt 4: Skriptberechtigungen konfigurieren und testen

Berechtigungen für Skripte setzen:

bash
# Nur Besitzer kann Skript ausführen
chmod 700 skript.sh

# Besitzer kann lesen/schreiben/ausführen, Gruppe kann lesen/ausführen
chmod 750 skript.sh

# Alle können das Skript ausführen
chmod 755 skript.sh

Skript testen:

bash
# Syntaxprüfung (ohne Ausführung)
bash -n skript.sh

# Debug-Modus (zeigt jeden Befehl vor der Ausführung an)
bash -x skript.sh

# Skript im Testmodus ausführen (wenn Unterstützung im Skript vorhanden)
./skript.sh --test

Schritt 5: Erweitertes Skript - Systemüberwachung

Skript erstellen (system_ueberwachung.sh):

bash
vim system_ueberwachung.sh

Fügen Sie folgenden Inhalt hinzu:

bash
#!/bin/bash

# Skript: system_ueberwachung.sh
# Funktion: Systemressourcen überwachen und Bericht erstellen

# Konfiguration
LOG_DATEI="/var/log/system_ueberwachung.log"
SCHWELLENWERT_CPU=80
SCHWELLENWERT_SPEICHER=90
SCHWELLENWERT_FESTPLATTE=95

# Funktion: Protokollieren
protokollieren() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_DATEI"
}

# Funktion: CPU-Auslastung prüfen
pruefe_cpu() {
    CPU_AUSLASTUNG=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
    CPU_AUSLASTUNG=${CPU_AUSLASTUNG%.*}  # Nachkommastellen entfernen
    
    if [ "$CPU_AUSLASTUNG" -ge "$SCHWELLENWERT_CPU" ]; then
        protokollieren "WARNUNG: CPU-Auslastung bei $CPU_AUSLASTUNG% (Schwellenwert: $SCHWELLENWERT_CPU%)"
    else
        protokollieren "INFO: CPU-Auslastung normal bei $CPU_AUSLASTUNG%"
    fi
}

# Funktion: Speichernutzung prüfen
pruefe_speicher() {
    SPEICHER_AUSLASTUNG=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
    SPEICHER_AUSLASTUNG=${SPEICHER_AUSLASTUNG%.*}  # Nachkommastellen entfernen
    
    if [ "$SPEICHER_AUSLASTUNG" -ge "$SCHWELLENWERT_SPEICHER" ]; then
        protokollieren "WARNUNG: Speichernutzung bei $SPEICHER_AUSLASTUNG% (Schwellenwert: $SCHWELLENWERT_SPEICHER%)"
    else
        protokollieren "INFO: Speichernutzung normal bei $SPEICHER_AUSLASTUNG%"
    fi
}

# Funktion: Festplattennutzung prüfen
pruefe_festplatte() {
    FESTPLATTE_AUSLASTUNG=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
    
    if [ "$FESTPLATTE_AUSLASTUNG" -ge "$SCHWELLENWERT_FESTPLATTE" ]; then
        protokollieren "WARNUNG: Festplattennutzung bei $FESTPLATTE_AUSLASTUNG% (Schwellenwert: $SCHWELLENWERT_FESTPLATTE%)"
    else
        protokollieren "INFO: Festplattennutzung normal bei $FESTPLATTE_AUSLASTUNG%"
    fi
}

# Hauptprogramm
protokollieren "=== Systemüberwachung gestartet ==="
pruefe_cpu
pruefe_speicher
pruefe_festplatte
protokollieren "=== Systemüberwachung abgeschlossen ==="

# Bericht anzeigen
echo "Systemüberwachung abgeschlossen. Bericht:"
cat "$LOG_DATEI" | tail -5

Skript ausführbar machen und testen:

bash
chmod +x system_ueberwachung.sh
sudo ./system_ueberwachung.sh

Shell-Skripting-Best Practices

1. Shebang immer angeben:

bash
#!/bin/bash

2. Kommentare verwenden:

bash
# Dies ist ein Kommentar

3. Fehlerbehandlung implementieren:

bash
if [ $? -ne 0 ]; then
    echo "Fehler aufgetreten!"
    exit 1
fi

4. Variablen in Anführungszeichen setzen:

bash
DATEI="meine datei.txt"
rm "$DATEI"  # Richtig
rm $DATEI      # Falsch (bei Leerzeichen im Dateinamen)

5. Debugging-Modus verwenden:

bash
bash -x skript.sh

Projekterweiterungen

  1. Interaktives Menü: Erstellen Sie ein Skript mit einem benutzerfreundlichen Menü
  2. E-Mail-Benachrichtigung: Senden Sie eine E-Mail, wenn ein Fehler auftritt
  3. Konfigurationsdatei: Lagern Sie Konfigurationen in eine externe Datei aus
  4. Protokollierung verbessern: Detailliertere Protokolle mit verschiedenen Schweregraden

Projektzusammenfassung

In diesem Projekt haben wir:

  • Shell-Skriptgrundlagen gelernt
  • Praktische Skripte für Backup und Benutzerverwaltung erstellt
  • Skriptberechtigungen konfiguriert
  • Erweiterte Skripte für Systemüberwachung entwickelt

Wichtige Konzepte, die verwendet wurden:

  • Variablen (VARIABLENNAME="wert")
  • Benutzereingaben (read -p "Eingabe: " variable)
  • Bedingte Anweisungen (if-then-else)
  • Schleifen (for, while)
  • Funktionen (funktionsname())
  • Fehlerbehandlung ($?, exit)

Frei für alle Anfänger