Was ist Bash? Grundlagen und erstes Skript

Autor: 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:

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?

Lesen Sie auch

Wie PHP-FPM PHP-Anfragen verarbeitet, sich vom Webserver unterscheidet und wie du Prozesse an Last und Hosting-Ressourcen anpasst.
BIND ist offene DNS-Serversoftware. Erfahre, welche Aufgaben sie übernimmt und wann sich der Betrieb eines eigenen Servers lohnt.
Was Polens REGON-Register und seine Kennnummer bedeuten, wie sie sich von NIP und KRS unterscheiden und wie Sie Unternehmensdaten prüfen.