Kurz: Die Shell ist das Programm, das deine Eingaben im Terminal liest und Befehle startet.
Teil des Kurses Bash
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" 17Ausgabe:
Hallo Welt
pwd gibt das aktuelle Verzeichnis aus
Ergebnis: 42
Mia ist 17 Jahre altEin 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.
hallo.sh
#!/usr/bin/env bash
# Das ist ein Kommentar
name="Mia"
echo "Hallo, $name!"
echo "Skript läuft mit Bash ${BASH_VERSINFO[0]}"Ausgabe:
Hallo, Mia!
Skript läuft mit Bash 5Ausfü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"Ausgabe:
eins
zwei
nur wenn der vorige gelang
nur wenn der vorige scheiterte
A
B
Hintergrund
in Unter-Shell
/tmp
EndeJeder 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 -> $?"Ausgabe:
true -> 0
false -> 1
ls -> 2
grep ohne Treffer -> 1Eingebaute Befehle erkunden
type cd echo ls grep
help echo | head -3Ausgabe:
cd 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.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
Übungsaufgabe
Schreibe ein Skript, das deinen Namen und das Ergebnis von 6 * 7 ausgibt.
Quiz zur Selbstkontrolle
Was bedeutet der Exit-Status 0?
- Erfolg (richtig)
- Fehler
- Abbruch durch den Nutzer
- Nichts
Wofür steht #!/usr/bin/env bash in der ersten Zeile?
- Der Shebang nennt den Interpreter des Skripts (richtig)
- Ein Kommentar ohne Bedeutung
- Ein Importbefehl
- Eine Variable
Was macht a && b?
- b läuft nur, wenn a erfolgreich war (richtig)
- a und b laufen parallel
- b läuft nur, wenn a scheitert
- a wird zweimal ausgeführt
Weiter im Kurs
Weiter: Variablen und Quoting
Alle Kapitel: Bash im Überblick