Was ist Bash? Grundlagen und erstes Skript
Autor: Redaktion Domeny.ForSale Veröffentlicht
Kurz gesagt: Bash ist eine System-Shell, also ein Programm, das deine Befehle liest und ausführen lässt. Damit kannst du Dateien bearbeiten, Programme starten und wiederkehrende Aufgaben mithilfe von Skripten automatisieren. Bash wird häufig unter Linux verwendet und ist auch unter macOS verfügbar. Unter Windows kannst du Bash unter anderem über WSL oder Git Bash nutzen.
Wozu dient Bash?
Der Name Bash steht für Bourne Again SHell und spielt auf die ältere Bourne-Shell an. „Bourne Again“ klingt dabei wie das englische „born again“, also „wiedergeboren“. Bash ist sowohl ein interaktives Werkzeug zur Eingabe von Befehlen als auch eine Skriptsprache. Ein Skript ist eine Textdatei mit Anweisungen, die ein Interpreter ausführt — in diesem Fall Bash.
Im interaktiven Modus gibst du einen Befehl ein und erhältst sofort das Ergebnis. In einem Skript speicherst du eine Abfolge von Aktionen, die du später erneut ausführen kannst, ohne jeden Schritt von Hand zu wiederholen.
Bash eignet sich unter anderem dafür:
- Dateien zu suchen, zu kopieren und zu ordnen;
- Entwicklungswerkzeuge und Tests auszuführen;
- Textausgaben anderer Programme zu verarbeiten;
- Verwaltungsaufgaben auf einem Server zu automatisieren.
Statt beispielsweise mehrere Dutzend Berichte von Hand in das passende Verzeichnis zu verschieben, kannst du diesen Vorgang mit einem einzigen Befehl beschreiben. Wenn dabei zusätzlich Bedingungen geprüft und Meldungen gespeichert werden sollen, ist ein Skript praktischer.
Bash, Terminal und Befehle sind unterschiedliche Dinge
Ein Terminal ist die Oberfläche, in der du Text eingibst und Antworten liest. Auf einem PC ist das meist eine Anwendung, die ein Terminal emuliert. Die Shell läuft innerhalb einer solchen Sitzung und interpretiert die eingegebenen Anweisungen. Bash ist eine von mehreren Shells; weitere sind beispielsweise Zsh, Fish und PowerShell.
Wenn du ein Terminal öffnest, bedeutet das also nicht automatisch, dass du Bash verwendest. Bei neueren macOS-Installationen ist die Standard-Shell meist Zsh. Ein Terminal unter Windows kann beispielsweise PowerShell oder eine Linux-Umgebung öffnen.
Nicht jeder Befehl, den du in Bash verwendest, ist Bestandteil von Bash. cd zum Wechseln des Verzeichnisses ist ein eingebauter Befehl. Dagegen sind ls, grep und mkdir normalerweise eigenständige Programme, die von der Shell gestartet werden. Welche Werkzeuge und Optionen verfügbar sind, hängt von der Umgebung ab.
Bash kann Programme über eine Pipe verbinden, die mit dem Zeichen | dargestellt wird. Eine Pipe leitet die Standardausgabe eines Befehls an die Standardeingabe des nächsten weiter:
printf '%s\n' 'bericht.txt' 'foto.jpg' | grep '\.txt$'
Hier gibt printf zwei Namen aus, und grep wählt die Zeile aus, die auf .txt endet. Dabei wird lediglich Text gefiltert — das Beispiel erstellt keine Dateien und sucht auch nicht nach Dateien auf dem Datenträger.
Verfügbarkeit prüfen und Bash starten
Unter Linux ist Bash häufig bereits installiert. Auch macOS stellt Bash bereit, allerdings kann sich die mitgelieferte Version von den Versionen in anderen Umgebungen unterscheiden. Um zu prüfen, ob das Programm verfügbar ist und welche Version installiert ist, gib im Terminal Folgendes ein:
bash --version
Dieser Test bestätigt nicht, dass die aktuelle Sitzung Bash verwendet. Er startet lediglich das verfügbare Programm mit der Option zur Versionsanzeige. Der Befehl bash startet eine Sitzung dieser Shell, exit beendet sie. Wenn du bereits in Bash arbeitest, kannst du die Version der aktuellen Shell mit printf '%s\n' "$BASH_VERSION" prüfen.
Unter Windows gibt es zwei verbreitete Lösungen mit unterschiedlichen Einsatzbereichen. WSL, das Windows-Subsystem für Linux, ermöglicht die Nutzung einer Linux-Umgebung. Git Bash stellt Bash und eine Sammlung von Werkzeugen bereit, die unter anderem für die Arbeit mit Git nützlich sind. Es ist jedoch keine vollständige Linux-Umgebung. Die aktuellen Installationsanforderungen findest du in der Dokumentation von Microsoft oder Git for Windows.
Das erste Skript in einem sicheren Testverzeichnis
Das folgende Beispiel erstellt zwei leere Berichtsdateien und verschiebt sie in ein Unterverzeichnis. Erstelle zunächst ein neues Arbeitsverzeichnis und wechsle hinein:
mkdir bash-test
cd bash-test
Falls das Verzeichnis bereits existiert, wähle einen anderen Namen. Fahre erst fort, wenn du erfolgreich in das neue Verzeichnis gewechselt bist. Erstelle darin mit einem Texteditor die Datei ordnen.sh mit folgendem Inhalt:
#!/usr/bin/env bash
verzeichnis="berichte"
mkdir -p "$verzeichnis" || exit 1
touch bericht-01.txt bericht-02.txt || exit 1
for datei in bericht-*.txt; do
mv -- "$datei" "$verzeichnis/" || exit 1
done
printf 'Berichte in folgendes Verzeichnis verschoben: %s\n' "$verzeichnis"
Die erste Zeile, der sogenannte Shebang, legt den Interpreter für den direkten Aufruf der Datei fest. Die Variable verzeichnis enthält den Namen des Zielverzeichnisses. Die for-Schleife wiederholt den Vorgang für jeden passenden Dateinamen. Die Anweisung || exit 1 bricht das Skript ab, wenn der vorherige Befehl einen Fehler meldet.
Starte das Skript und prüfe das Ergebnis:
bash ordnen.sh
ls berichte
Bei dieser Art des Aufrufs benötigt die Datei keine Ausführungsberechtigung: Den Interpreter gibst du mit dem Befehl bash an. Die Anführungszeichen um Variablen verhindern unter anderem, dass Namen mit Leerzeichen in mehrere Argumente aufgeteilt werden.
Wann Bash sinnvoll ist und worauf du achten solltest
Bash ist eine gute Wahl, wenn eine Aufgabe hauptsächlich darin besteht, vorhandene Werkzeuge zu verbinden und mit Dateien zu arbeiten. Bei umfangreicher Logik, komplexen Datenstrukturen oder einer größeren Anwendung ist Python oder eine andere universell einsetzbare Programmiersprache häufig übersichtlicher und leichter zu testen.
Befehle werden mit den Berechtigungen des Benutzers ausgeführt, der sie aufruft. Wenn du eine Datei mit rm löschst, wird sie normalerweise nicht in den Papierkorb verschoben. Die Umleitung > kann den Inhalt einer vorhandenen Datei überschreiben. Führe kopierte Anweisungen nicht mit sudo aus, solange du ihre Funktionsweise nicht verstehst. Dieses Werkzeug ermöglicht es, Befehle mit den Berechtigungen eines anderen Benutzers auszuführen.
Ändere das Beispielskript zunächst so, dass es anstelle von mv die Dateinamen nur mit printf ausgibt. Die Liste vor dem Ausführen von Änderungen zu prüfen, ist eine einfache Gewohnheit, die auch bei der Arbeit mit echten Daten hilfreich ist.
Siehe auch: Was ist eine Shell?
