Das Inkrementieren (Erhöhen) und Dekrementieren (Verringern) von Variablen gehört zu den grundlegenden Operationen in Bash-Skripten. Diese Techniken kommen vor allem bei Zählern in Schleifen zum Einsatz.

Bash bietet mehrere Möglichkeiten, um numerische Variablen zu verändern: die doppelten Klammern ((...)), die arithmetische Substitution $((...)) und den eingebauten Befehl let. Dieser Artikel zeigt die verschiedenen Methoden mit praktischen Beispielen.

Die Operatoren + und -

Die einfachste Methode verwendet die klassischen Rechenoperatoren. Dabei kannst du die Variable um einen beliebigen Wert erhöhen oder verringern.

Inkrementieren:

i=$((i+1))
((i=i+1))
let "i=i+1"

Dekrementieren:

i=$((i-1))
((i=i-1))
let "i=i-1"

Alle drei Varianten erzielen dasselbe Ergebnis. Die Schreibweise mit doppelten Klammern ((...)) ist am kompaktesten und wird am häufigsten verwendet.

Beispiel: Zähler in einer Schleife

i=0

until [ $i -gt 3 ]
do
  echo "Zähler: $i"
  ((i=i+1))
done

Ausgabe:

Zähler: 0
Zähler: 1
Zähler: 2
Zähler: 3

Die Zuweisungsoperatoren += und -=

Die kombinierten Zuweisungsoperatoren bieten eine kürzere Schreibweise. Der Wert rechts vom Operator wird zur Variable addiert oder davon subtrahiert.

((i+=1))
let "i+=1"
((i-=1))
let "i-=1"

Diese Operatoren eignen sich besonders, wenn du um andere Werte als 1 verändern willst.

Beispiel: Countdown in 5er-Schritten

i=20

while [ $i -ge 5 ]
do
  echo "Wert: $i"
  ((i-=5))
done

Ausgabe:

Wert: 20
Wert: 15
Wert: 10
Wert: 5

Die Operatoren ++ und --

Für das Erhöhen oder Verringern um genau 1 bieten sich die Inkrement- und Dekrement-Operatoren an.

Inkrementieren:

((i++))
((++i))
let "i++"
let "++i"

Dekrementieren:

((i--))
((--i))
let "i--"
let "--i"

Präfix vs. Postfix

Der Operator kann vor oder nach der Variable stehen:

  • Präfix (++i, --i): Verändert die Variable zuerst, gibt dann den neuen Wert zurück.
  • Postfix (i++, i--): Gibt den aktuellen Wert zurück, verändert dann die Variable.

Wenn du nur die Variable verändern willst, spielt die Position keine Rolle. Der Unterschied wird erst relevant, wenn du das Ergebnis direkt verwendest.

Beispiel: Unterschied zwischen Präfix und Postfix

Postfix – der alte Wert wird zugewiesen:

x=5
y=$((x++))
echo "x: $x"
echo "y: $y"

Ausgabe:

x: 6
y: 5

Präfix – der neue Wert wird zugewiesen:

x=5
y=$((++x))
echo "x: $x"
echo "y: $y"

Ausgabe:

x: 6
y: 6

Beispiel: Schleife mit Postfix-Inkrement

#!/bin/bash
i=0

while true; do
  if [[ "$i" -gt 3 ]]; then
    break
  fi
  echo "Durchlauf: $i"
  ((i++))
done

Ausgabe:

Durchlauf: 0
Durchlauf: 1
Durchlauf: 2
Durchlauf: 3

Welche Methode verwenden?

MethodeSyntaxFlexibilität
Doppelte Klammern((i++))Kompakt, für +1/-1
Arithmetische Substitutioni=$((i+5))Beliebige Werte, Ergebnis speicherbar
Zuweisungsoperator((i+=5))Beliebige Werte, kurze Schreibweise
let-Befehllet "i++"Kompatibel mit älteren Shells

Die doppelten Klammern ((...)) sind in modernen Bash-Skripten die bevorzugte Methode. Sie sind gut lesbar und funktionieren ohne das Dollarzeichen, wenn du das Ergebnis nicht direkt benötigst.

Zusammenfassung

Bash bietet mehrere gleichwertige Wege zum Inkrementieren und Dekrementieren von Variablen. Für einfache Zähler eignen sich ((i++)) oder ((i--)). Für beliebige Schrittweiten verwendest du ((i+=n)) oder ((i-=n)). Das Ergebnis ist bei allen Methoden identisch – die Wahl hängt von persönlicher Präferenz und Lesbarkeit ab.