Bash: 5 typische Stolpersteine und die sauberen Lösungen

Fünf typische Bash-Fragen aus der Praxis, kompakt beantwortet: Ordner prüfen, Programme finden, Substrings checken, Dateiname trennen und farbiger Output

Dieser Artikel hat eine Lesedauer von 2 minutes Minuten.

Bash: 5 typische Stolpersteine und die sauberen Lösungen

Wenn ich Bash erkläre, sind es selten exotische Features, die hängen bleiben. Es sind fünf Basics, die ständig wieder auftauchen. Hier sind sie als kompakte Sammlung, inklusive der Muster, die in echten Skripten zuverlässig funktionieren.

1. Wie prüfe ich, ob ein Ordner existiert

Viele Skripte bauen auf Dateien und Verzeichnissen auf. Bevor du etwas anlegst, liest oder schreibst, ist ein klarer Check sinnvoll.

Der Standardtest ist -d:

DIR="/tmp/example"

if [[ -d "$DIR" ]]; then
  echo "Ordner existiert"
else
  echo "Ordner existiert nicht"
fi

Wenn du in der Praxis einfach sicherstellen willst, dass ein Ordner existiert, ist oft mkdir -p die bessere Antwort als ein eigener Check:

mkdir -p "$DIR"

Mehr Kontext, inklusive typischer Fallen:
Prüfen, ob ein Ordner existiert

2. Wie prüfe ich, ob ein Programm verfügbar ist

Skripte scheitern häufig nicht an deiner Logik, sondern an fehlenden Tools. Der pragmatische Standard ist command -v.

if command -v git >/dev/null 2>&1; then
  echo "git ist verfügbar"
else
  echo "git fehlt"
fi

Für mehrere Abhängigkeiten lohnt sich ein kleines Helper-Pattern:

require_cmd() {
  local cmd="$1"
  if ! command -v "$cmd" >/dev/null 2>&1; then
    echo "Fehler: Benötigtes Programm fehlt: $cmd" >&2
    exit 1
  fi
}

require_cmd git
require_cmd curl

Mehr Details, inklusive Alternativen und Pfad-Checks:
Prüfen, ob ein Programm installiert ist

3. Wie prüfe ich, ob ein String einen Teilstring enthält

Das ist eine der typischen Fragen, sobald Scripts mit Parametern, Dateinamen oder Output arbeiten. In Bash ist der einfachste Ansatz Pattern-Matching in [[ ... ]].

text="Hallo Oliver, willkommen im Terminal"
needle="Oliver"

if [[ "$text" == *"$needle"* ]]; then
  echo "Treffer"
else
  echo "Kein Treffer"
fi

Der wichtige Punkt ist das Quoting. Ohne "$text" und "$needle" zerlegt dir Bash Pfade mit Leerzeichen schnell in mehrere Teile.

Wenn Inputs Sonderzeichen enthalten können und du wirklich literal prüfen willst, ist eine Fixed-String-Variante oft robuster.

Mehr dazu, inklusive Stolperfallen:
Prüfen, ob ein String einen Teilstring enthält

4. Wie trenne ich Dateiname und Endung sauber

Spätestens bei Automationsskripten ist Dateinamenslogik unvermeidlich. Bash kann das mit Parameter Expansion sehr elegant.

Standardfall:

file="report.pdf"
base="${file%.*}"
ext="${file##*.}"
echo "base=$base ext=$ext"

In der Praxis musst du aber auch Sonderfälle bedenken: keine Endung, mehrere Punkte, versteckte Dateien wie .env, und mehrteilige Endungen wie .tar.gz. Je nach Projekt lohnt sich dafür eine bewusst definierte Regel, statt eines One-Liners.

Mehr Beispiele und robuste Varianten:
Dateiname und Endung sauber trennen

5. Wie mache ich farbigen Output, ohne das Terminal zu “verfärben”

Farben sind kein Muss, aber sie machen Statusausgaben deutlich lesbarer. Der wichtigste Punkt ist immer der Reset.

Mit printf ist es am stabilsten:

RED="\033[31m"
GREEN="\033[32m"
RESET="\033[0m"

printf "${GREEN}OK${RESET} %s\n" "Alles bereit"
printf "${RED}ERR${RESET} %s\n" "Etwas ist schiefgelaufen"

Ein kleines Logging-Pattern hält das Skript sauber, statt überall Escape Codes zu streuen.

Mehr dazu, inklusive NO_COLOR-Schalter:
Farben im Terminal ausgeben

Ein Muster, das diese fünf Fragen verbindet

Diese Fragen wirken wie Einzelfälle, sind aber im Kern dasselbe Problem: Bash ist stark, wenn du klare, wiederverwendbare Muster hast.

  • früh prüfen statt später rätseln
  • Inputs quoten, bis das Gegenteil bewiesen ist
  • Sonderfälle bewusst behandeln, nicht zufällig
  • Output so bauen, dass er im Alltag lesbar bleibt

Wenn du diese fünf Basics sitzt, fühlen sich viele “komplizierte” Skripte plötzlich wie eine Kette kleiner, kontrollierter Schritte an.

🤫 Pssst: Du möchtest lernen, wie Bash funktioniert? Dann schau dir doch mein Bash-Tutorial für Anfänger an.

Eine Idee im Kopf?


Dann kontaktier mich doch


Wenn du Social-Media-Unterstützung brauchst oder ein Thema journalistisch sauber aufbereiten willst, melde dich.