Bash Scripting Grundlagen
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
- 📖
man bash - 📧 E-Mail: support@enjyn.de