EMZETT.
Login

Kurz: Die Shell ist das Programm, das deine Eingaben im Terminal liest und Befehle startet.

Teil des Kurses Bash

Kapitel 1 von 13 im Kurs Bash. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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" 17

Ausgabe:

Hallo 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.

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 5

Ausführen:

chmod +x hallo.sh     # ausführbar machen (einmalig)
./hallo.sh            # starten
bash hallo.sh         # oder direkt über Bash

Befehle 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
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 -> $?"

Ausgabe:

true -> 0
false -> 1
ls -> 2
grep ohne Treffer -> 1

Eingebaute Befehle erkunden

type cd echo ls grep
help echo | head -3

Ausgabe:

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

Weiter im Kurs

Weiter: Variablen und Quoting

Alle Kapitel: Bash im Überblick