Appearance
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
- Shell-Skriptformat und Ausführungsmethode verstehen
- Skript erstellen: Automatische Dateisicherung
- Skript erstellen: Benutzer批量创建
- 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
# SkriptendeSkript ausführungsmethoden:
- Direkt ausführen (empfohlen):bash
chmod +x skript.sh ./skript.sh - Mit Bash ausführen:bash
bash skript.sh - Mit
sourceausführen (im aktuellen Shell-Kontext):bashsource skript.sh # oder . skript.sh
Schritt 2: Skript 1 - Automatische Dateisicherung
Skript erstellen (autobackup.sh):
bash
vim autobackup.shFü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!"
fiSkript ausführbar machen und testen:
bash
chmod +x autobackup.sh
./autobackup.shSchritt 3: Skript 2 - Benutzer批量创建
Skript erstellen (benutzer_erstellen.sh):
bash
vim benutzer_erstellen.shFü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
doneSkript ausführbar machen und testen:
bash
chmod +x benutzer_erstellen.sh
sudo ./benutzer_erstellen.shSchritt 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.shSkript 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 --testSchritt 5: Erweitertes Skript - Systemüberwachung
Skript erstellen (system_ueberwachung.sh):
bash
vim system_ueberwachung.shFü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 -5Skript ausführbar machen und testen:
bash
chmod +x system_ueberwachung.sh
sudo ./system_ueberwachung.shShell-Skripting-Best Practices
1. Shebang immer angeben:
bash
#!/bin/bash2. Kommentare verwenden:
bash
# Dies ist ein Kommentar3. Fehlerbehandlung implementieren:
bash
if [ $? -ne 0 ]; then
echo "Fehler aufgetreten!"
exit 1
fi4. 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.shProjekterweiterungen
- Interaktives Menü: Erstellen Sie ein Skript mit einem benutzerfreundlichen Menü
- E-Mail-Benachrichtigung: Senden Sie eine E-Mail, wenn ein Fehler auftritt
- Konfigurationsdatei: Lagern Sie Konfigurationen in eine externe Datei aus
- 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)
