Was ist die Shell?
Die Shell ist das Programm, das deine Eingaben im Terminal liest und Befehle startet. Bash (Bourne Again SHell, 1989) ist die Standard-Shell auf den meisten Linux-Systemen und lange auch auf macOS (dort heute zsh, sehr ähnlich). Mit Bash-Skripten automatisierst du wiederkehrende Aufgaben: Backups, Deployments, Auswertung von Logdateien, Build-Pipelines (CI/CD).
Stärke: Programme miteinander verbinden. Schwäche: Für komplexe Logik, Datenstrukturen und große Projekte sind Python & Co. besser geeignet.
Befehle im Terminal
echo "Hallo Welt"
pwd >/dev/null && echo "pwd gibt das aktuelle Verzeichnis aus"
echo "Ergebnis: $((6 * 7))"
printf "%s ist %d Jahre alt\n" "Mia" 17Hallo Welt pwd gibt das aktuelle Verzeichnis aus Ergebnis: 42 Mia ist 17 Jahre alt
Ein Befehl besteht aus Programmname, Optionen (-l, --help) und Argumenten. Hilfe gibt es mit befehl --help, man befehl (Handbuch) oder type befehl (was ist das? Programm, eingebauter Befehl, Alias).
Das erste Skript
Ein Skript ist eine Textdatei mit Befehlen. Die erste Zeile, der Shebang, nennt den Interpreter.
#!/usr/bin/env bash
# Das ist ein Kommentar
name="Mia"
echo "Hallo, $name!"
echo "Skript läuft mit Bash ${BASH_VERSINFO[0]}"Hallo, Mia! Skript läuft mit Bash 5
Ausführen:
chmod +x hallo.sh # ausführbar machen (einmalig)
./hallo.sh # starten
bash hallo.sh # oder direkt über BashBefehle verbinden
echo "eins"; echo "zwei" # nacheinander
true && echo "nur wenn der vorige gelang"
false || echo "nur wenn der vorige scheiterte"
echo "A" && echo "B" || echo "C"
echo "Hintergrund" & # im Hintergrund starten
wait
(echo "in Unter-Shell"; cd /tmp; pwd)
echo "Ende"eins zwei nur wenn der vorige gelang nur wenn der vorige scheiterte A B Hintergrund in Unter-Shell /tmp Ende
Jeder Befehl liefert einen Exit-Status: 0 heißt Erfolg, alles andere Fehler. Die Variable $? enthält den Status des letzten Befehls.
true; echo "true -> $?"
false; echo "false -> $?"
ls /gibt/es/nicht 2>/dev/null; echo "ls -> $?"
grep -q "x" <<< "abc"; echo "grep ohne Treffer -> $?"true -> 0 false -> 1 ls -> 2 grep ohne Treffer -> 1
Eingebaute Befehle erkunden
type cd echo ls grep
help echo | head -3cd is a shell builtin
echo is a shell builtin
ls is /usr/bin/ls
grep is /usr/bin/grep
echo: echo [-neE] [arg ...]
Write arguments to the standard output.So führst du den Code aus: Skript als skript.sh speichern, ausführbar machen (chmod +x skript.sh) und mit ./skript.sh starten oder per bash skript.sh.
Merke
- Bash startet Programme und verbindet sie; Skripte beginnen mit
#!/usr/bin/env bash ;trennt,&&(bei Erfolg),||(bei Fehler),&(Hintergrund)- Exit-Status
0= Erfolg, in$? - Hilfe:
--help,man,type - Skripte ausführbar machen:
chmod +x
Aufgabe
Schreibe ein Skript, das deinen Namen und das Ergebnis von 6 * 7 ausgibt.