đŸŒ BashPanda v2 Lösungsbuch (Dojo Cheat-Sheet)

Dieses Dokument enthĂ€lt alle Fragen, die korrekten Antworten und eine kurze verstĂ€ndliche ErklĂ€rung fĂŒr jede GĂŒrtelprĂŒfung im BashPanda Dojo.


đŸ–€ Schwarzer GĂŒrtel (Der Anfang / Basis)

1. Was gibt 'echo $HOME' aus?

  • Optionen:
  • A: Dein Home-Verzeichnis
  • B: Die Umgebungsvariable HOME
  • C: Beide Antworten sind richtig (KORREKT)
  • D: Einen Fehler
  • ErklĂ€rung: $HOME wertet die Umgebungsvariable HOME aus und gibt den Pfad deines Home-Verzeichnisses (z. B. /Users/bmt oder /home/visitor) aus. Da dieser Pfad sowohl dein Home-Verzeichnis darstellt als auch der Wert der Variable ist, sind beide Antworten semantisch korrekt.

2. Wie erstellt man eine Variable?

  • Optionen:
  • A: name = value
  • B: name=value (KORREKT)
  • C: $name=value
  • D: set name=value
  • ErklĂ€rung: In Bash dĂŒrfen um das Zuweisungszeichen = keine Leerzeichen stehen. Andernfalls interpretiert die Shell das erste Wort als Befehl. Außerdem wird das $-Zeichen nur beim Auslesen einer Variable verwendet, nicht bei der Zuweisung.

3. Was macht 'read -p "Name: " name'?

  • Optionen:
  • A: Liest eine Datei
  • B: Zeigt 'Name:' und speichert Eingabe in $name (KORREKT)
  • C: Gibt $name aus
  • D: Nichts
  • ErklĂ€rung: Der Befehl read liest Benutzereingaben von der Tastatur ein. Das Flag -p (Prompt) zeigt dem Benutzer vorab einen Hinweistext (hier "Name: ") an. Das letzte Argument name definiert den Variablennamen, unter dem die Eingabe gespeichert wird.

4. Welcher ANSI Code macht Text fett?

  • Optionen:
  • A: \e[0m
  • B: \e[1m (KORREKT)
  • C: \e[4m
  • D: \e[32m
  • ErklĂ€rung: ANSI-Escapesequenzen steuern die Formatierung im Terminal. \e[1m (oder \033[1m) aktiviert den Fettdruck (Bold). \e[0m setzt alle Formatierungen zurĂŒck, \e[4m unterstreicht Text, und \e[32m fĂ€rbt den Text grĂŒn.

5. Was ist der Unterschied zwischen ' und " in echo?

  • Optionen:
  • A: Keiner
  • B: ' ignoriert Variablen, " ersetzt sie (KORREKT)
  • C: " ignoriert Variablen
  • D: Beide ersetzen Variablen
  • ErklĂ€rung: Einfache AnfĂŒhrungszeichen ' ' (Strong Quotes) schĂŒtzen den Text vollstĂ€ndig, sodass Variablen nicht ausgewertet werden (z. B. wird $var als Text gedruckt). Doppelte AnfĂŒhrungszeichen " " (Weak Quotes) erlauben die Variablenersetzung (Interpolation), sodass der Inhalt der Variable ausgegeben wird.

💖 Pinker GĂŒrtel (Logik & Arrays)

1. Was prĂŒft [ $a -eq $b ]?

  • Optionen:
  • A: String-Gleichheit
  • B: Zahlen-Gleichheit (KORREKT)
  • C: GrĂ¶ĂŸer als
  • D: Kleiner als
  • ErklĂ€rung: Der Operator -eq (equal) wird in Bash ausschließlich fĂŒr den numerischen Vergleich (Zahlen-Gleichheit) verwendet. FĂŒr Strings nutzt man stattdessen = oder ==.

2. Wie greift man auf das 3. Array-Element zu?

  • Optionen:
  • A: ${arr[3]}
  • B: ${arr[2]} (KORREKT)
  • C: $arr[2]
  • D: arr[3]
  • ErklĂ€rung: Arrays in Bash sind 0-indiziert, das heißt, das erste Element hat den Index 0, das zweite 1 und das dritte 2. Zudem ist die Syntax ${array_name[index]} zwingend erforderlich, um auf einzelne Elemente zuzugreifen.

3. Was macht 'while [ $i -le 5 ]; do ... done'?

  • Optionen:
  • A: LĂ€uft 4 mal
  • B: LĂ€uft 5 mal (KORREKT im Quiz)
  • C: LĂ€uft 6 mal
  • D: Endlosschleife
  • ErklĂ€rung: Im Quiz wird davon ausgegangen, dass der ZĂ€hler bei 1 beginnt und bis 5 hochzĂ€hlt, weshalb B („LĂ€uft 5 mal“) die gesuchte Antwort ist. (Hinweis: WĂŒrde die Variable bei i=0 starten, liefe die Schleife tatsĂ€chlich 6-mal).

4. Wie zÀhlt man Arrays hoch? (Eigentlich Schleifen-ZÀhler)

  • Optionen:
  • A: i++
  • B: i=$((i + 1)) (KORREKT in der Online-Version)
  • C: let i++
  • D: Alle sind richtig (KORREKT in der lokalen Datei)
  • ErklĂ€rung: Hier gibt es einen Unterschied zwischen der Online-Seite und der lokalen Datei:
  • Online (branko.de): Erwartet B (i=$((i + 1))).
  • Lokal (panda_guertel.html): Erwartet D (Alle sind richtig).
  • Hinweis zur Praxis: i=$((i + 1)) und let i++ sind in Bash die Standardwege. i++ allein funktioniert nur innerhalb von ((...)).

5. Was gibt ${#arr[@]} zurĂŒck?

  • Optionen:
  • A: Erstes Element
  • B: Letztes Element
  • C: Anzahl Elemente (KORREKT)
  • D: Fehler
  • ErklĂ€rung: In der Bash-Array-Syntax steht @ fĂŒr alle Elemente. Das vorangestellte #-Zeichen (${#...}) zĂ€hlt die Elemente. Somit liefert ${#arr[@]} die Gesamtzahl der Elemente im Array zurĂŒck.

💙 Blauer GĂŒrtel (Rechnen & Sed)

1. Was macht 'sed s/alt/neu/'?

  • Optionen:
  • A: Löscht 'alt'
  • B: Ersetzt erstes 'alt' mit 'neu' (KORREKT)
  • C: Ersetzt alle 'alt' mit 'neu'
  • D: Sucht nach 'alt'
  • ErklĂ€rung: Der Stream-Editor sed verwendet den Befehl s (substitute) fĂŒr Ersetzungen. Ohne den globalen Flag /g am Ende (sed 's/alt/neu/g') wird standardmĂ€ĂŸig nur das erste Vorkommen pro Zeile ersetzt.

2. WofĂŒr nutzt man 'case' statt if/then?

  • Optionen:
  • A: FĂŒr Schleifen
  • B: FĂŒr mehrere if-Alternativen (KORREKT)
  • C: FĂŒr Arrays
  • D: FĂŒr Funktionen
  • ErklĂ€rung: Eine case-Struktur dient dazu, eine Variable mit verschiedenen Mustern abzugleichen. Sie ist oft ĂŒbersichtlicher und schneller zu schreiben als lange Ketten aus if ... elif ... else.

3. Wie rechnet man mit Fließkommazahlen?

  • Optionen:
  • A: $(( ))
  • B: bc (KORREKT)
  • C: let
  • D: expr
  • ErklĂ€rung: Die eingebaute Bash-Arithmetik ($(( )), let, expr) kann nur mit Ganzzahlen (Integern) rechnen. FĂŒr Fließkommazahlen (Dezimalzahlen) muss ein externes Tool wie bc (Basic Calculator) verwendet werden.

4. Was bedeutet das * in case?

  • Optionen:
  • A: Multiplikation
  • B: Wildcard (alles)
  • C: Default-Fall (KORREKT)
  • D: Fehler
  • ErklĂ€rung: In einer case-Anweisung steht das Muster * am Ende fĂŒr alle Werte, die nicht durch vorherige Muster abgedeckt wurden. Es verhĂ€lt sich wie das default in Switch-Statements anderer Programmiersprachen.

5. Wie nutzt man bc fĂŒr Division?

  • Optionen:
  • A: bc 10/3
  • B: echo '10/3' | bc (KORREKT)
  • C: 10/3 | bc
  • D: bc(10/3)
  • ErklĂ€rung: bc liest Berechnungen standardmĂ€ĂŸig aus der Standard-Eingabe (Stdin). Daher ĂŒbergibt man den mathematischen Ausdruck per Pipe (echo '10/3' | bc).

💚 GrĂŒner GĂŒrtel (Grep & Regex)

1. Was macht grep -i?

  • Optionen:
  • A: Zeigt Zeilennummern
  • B: Ignoriert Groß-/Kleinschreibung (KORREKT)
  • C: Invertiert Suche
  • D: Rekursiv suchen
  • ErklĂ€rung: Das Flag -i steht fĂŒr ignore-case. Es sorgt dafĂŒr, dass bei der Mustersuche nicht zwischen Groß- und Kleinschreibung unterschieden wird.

2. Was bedeutet ^ in Regex?

  • Optionen:
  • A: Zeilenanfang (KORREKT)
  • B: Zeilenende
  • C: Beliebiges Zeichen
  • D: Wiederholung
  • ErklĂ€rung: In regulĂ€ren AusdrĂŒcken ist das Zirkumflex ^ ein Anker, der festlegt, dass das nachfolgende Muster direkt am Anfang einer Zeile beginnen muss. (Das Zeilenende wird durch $ markiert).

3. Was matched [0-9]+ in Regex?

  • Optionen:
  • A: Genau eine Ziffer
  • B: Eine oder mehr Ziffern (KORREKT)
  • C: Null oder mehr Ziffern
  • D: Keine Ziffer
  • ErklĂ€rung: Die eckigen Klammern [0-9] matchen eine beliebige Ziffer. Das Pluszeichen + ist ein Quantifizierer und steht fĂŒr „einmal oder mehrmals“.

4. Wie sucht man rekursiv in allen Dateien?

  • Optionen:
  • A: grep muster *
  • B: grep -r muster . (KORREKT)
  • C: grep -i muster
  • D: grep -n muster
  • ErklĂ€rung: Das Flag -r (oder -R) steht fĂŒr recursive. Es veranlasst grep, alle Dateien im angegebenen Verzeichnis (hier . fĂŒr das aktuelle Verzeichnis) und allen Unterverzeichnissen zu durchsuchen.

5. Was matched .* in Regex?

  • Optionen:
  • A: Nichts
  • B: Punkt und Stern
  • C: Beliebige Zeichen (0+) (KORREKT)
  • D: Ein Zeichen
  • ErklĂ€rung: Der Punkt . steht in regulĂ€ren AusdrĂŒcken fĂŒr ein beliebiges einzelnes Zeichen (außer Zeilenumbruch). Der Stern * bedeutet „null oder mehrmals“. Zusammen steht .* fĂŒr eine beliebige Folge von Zeichen beliebiger LĂ€nge.

💛 Gelber GĂŒrtel (Funktionen)

1. Wie definiert man eine Funktion?

  • Optionen:
  • A: func name() {}
  • B: function name() {}
  • C: def name() {}
  • D: Beide 1 und 2 (KORREKT im Quiz / function name() {} & name() {} in Bash)
  • ErklĂ€rung: In Standard-Bash definiert man Funktionen entweder ĂŒber function name { ... } oder kompakter ĂŒber name() { ... }. Das SchlĂŒsselwort func existiert in Bash eigentlich nicht (wohl aber in Go oder Kotlin). Im Quiz gilt jedoch D als Antwort.

2. Was ist $1 in einer Funktion?

  • Optionen:
  • A: Erster Buchstabe
  • B: Erster Parameter (KORREKT)
  • C: Exit-Code
  • D: PID
  • ErklĂ€rung: Funktionen in Bash erhalten Argumente wie eigenstĂ€ndige Skripte ĂŒber positionelle Parameter. $1 greift auf das erste Argument zu, das der Funktion beim Aufruf ĂŒbergeben wurde.

3. Was macht 'source datei.sh'?

  • Optionen:
  • A: FĂŒhrt Datei aus
  • B: LĂ€dt Funktionen in aktuelle Shell (KORREKT)
  • C: Kopiert Datei
  • D: Löscht Datei
  • ErklĂ€rung: source (oder auch der Punkt-Befehl .) fĂŒhrt ein Skript im aktuellen Prozess der Shell aus. Dadurch bleiben dort definierte Variablen und Funktionen in der aktuellen Sitzung erhalten, statt in einer Sub-Shell zu verpuffen.

4. Was macht 'return 42' in einer Funktion?

  • Optionen:
  • A: Gibt 42 aus
  • B: Beendet Skript
  • C: VerlĂ€sst Funktion mit Code 42 (KORREKT)
  • D: Fehler
  • ErklĂ€rung: In Bash-Funktionen gibt return keinen Text oder Wert zurĂŒck, sondern einen numerischen Statuscode (Exit-Status, 0 bis 255). Ein Wert von 0 bedeutet Erfolg, ungleich 0 (z. B. 42) signalisiert einen Fehler oder einen benutzerdefinierten Status.

5. Was ist $@ in einer Funktion?

  • Optionen:
  • A: Erster Parameter
  • B: Alle Parameter (KORREKT)
  • C: Anzahl Parameter
  • D: Funktionsname
  • ErklĂ€rung: Die spezielle Variable $@ expandiert zu allen Parametern, die an die Funktion oder das Skript ĂŒbergeben wurden (einzeln in AnfĂŒhrungszeichen eingeschlossen).

đŸ€ Weißer GĂŒrtel (Die Leere / Prozesse)

1. Was macht & am Ende eines Befehls?

  • Optionen:
  • A: Beendet ihn
  • B: Startet im Hintergrund (KORREKT)
  • C: Wiederholt ihn
  • D: Nichts
  • ErklĂ€rung: HĂ€ngt man ein kaufmĂ€nnisches Und-Zeichen & an einen Befehl an, startet die Shell diesen Befehl asynchron im Hintergrund und gibt das Terminal sofort wieder fĂŒr neue Eingaben frei.

2. Was ist $! ?

  • Optionen:
  • A: Exit-Code
  • B: PID des letzten Background-Jobs (KORREKT)
  • C: Anzahl Parameter
  • D: Home-Verzeichnis
  • ErklĂ€rung: Die Spezialvariable $! enthĂ€lt die Prozess-ID (PID) des Befehls, der als Letztes im Hintergrund (mit &) gestartet wurde.

3. Was macht 'wait'?

  • Optionen:
  • A: Wartet 1 Sekunde
  • B: Wartet auf Eingabe
  • C: Wartet auf Background-Jobs (KORREKT)
  • D: Pausiert Skript
  • ErklĂ€rung: Der eingebaute Befehl wait blockiert die AusfĂŒhrung des aktuellen Skripts so lange, bis alle im Hintergrund laufenden Jobs (oder ein bestimmter Job ĂŒber seine PID) vollstĂ€ndig beendet sind.

4. Wie zeigt man alle Background-Jobs?

  • Optionen:
  • A: ps
  • B: jobs (KORREKT)
  • C: bg
  • D: fg
  • ErklĂ€rung: Der Befehl jobs listet alle aktiven, pausierten oder im Hintergrund laufenden Prozesse auf, die von der aktuellen Shell-Sitzung gestartet wurden.

5. Was macht 'fg %1'?

  • Optionen:
  • A: Beendet Job 1
  • B: Bringt Job 1 in Vordergrund (KORREKT)
  • C: Startet Job 1
  • D: Pausiert Job 1
  • ErklĂ€rung: fg steht fĂŒr foreground. Mit fg %1 holst du den Job mit der Jobnummer 1 aus dem Hintergrund zurĂŒck in den interaktiven Vordergrund deines Terminals.