Introduzione

Una delle operazioni aritmetiche più comuni durante la scrittura di script Bash è l'incremento e il decremento delle variabili. Questo è spesso usato nei loop come contatore, ma può verificarsi anche altrove nello script.

Incrementare e decrementare significa aggiungere o sottrarre un valore (di solito 1), rispettivamente, dal valore di una variabile numerica. L'espansione aritmetica può essere eseguita usando le doppie parentesi ((...)) e $((...)) o con il comando incorporato let .

In Bash, ci sono diversi modi per incrementare/decrementare una variabile. Questo articolo spiega alcuni di essi.

Utilizzo degli operatori + e -

Il modo più semplice per increment/decrement una variabile è usando gli operatori + e -.

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

Questo metodo consente di incrementare e decrementare la variabile di qualsiasi valore desiderato.

Ecco un esempio di incremento di una variabile all'interno di un ciclo until:

i=0

until [ $i -gt 3 ]
do
  echo i: $i
  ((i=i+1))
done
i: 0
i: 1
i: 2
i: 3

Gli operatori += e -=

Oltre agli operatori di base spiegati sopra, bash fornisce anche gli operatori di assegnazione += e -=. Questi operatori vengono utilizzati per incrementare e decrementare il valore dell'operando di sinistra con il valore specificato dopo l'operatore.

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

Nel loop while seguente stiamo diminuendo il valore della variabile i di 5.

i=20

while [ $i -ge 5 ]
do
  echo Number: $i
  let "i-=5" 
done
Number: 20
Number: 15
Number: 10
Number: 5

Utilizzo degli operatori ++ e --

Gli operatori ++ e -- incrementano e diminuiscono, rispettivamente, il suo operando di 1 e restituiscono il valore.

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

Gli operatori possono essere utilizzati prima o dopo l'operando. Sono anche conosciuti come:

  • incremento prefisso: ++i
  • decremento prefisso: --i
  • incremento postfisso: i++
  • decremento postfisso: i--

Gli operatori prefisso prima aumentano / diminuiscono gli operatori di 1 e quindi restituiscono il nuovo valore degli operatori. D'altra parte, gli operatori postfix restituiscono il valore degli operatori prima che sia stato incrementato / decrementato.

Se si desidera solo incrementare / decrementare la variabile, non vi è alcuna differenza se si utilizza l'operatore prefisso o postfisso. Fa la differenza solo se il risultato degli operatori viene utilizzato in un'altra operazione o assegnato a un'altra variabile.

Gli esempi seguenti mostrano come funziona l'operatore  ++ quando viene utilizzato prima e dopo il suo operatore:

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

Di seguito è riportato un esempio di come utilizzare l'incremento postfix in uno script bash:

#!/bin/bash
i=0
while true; do
  if [[ "$i" -gt 3 ]]; then
       exit 1
  fi
  echo i: $i
  ((i++))
done

Lo svantaggio dell'utilizzo di questi operatori è che la variabile può essere solo incrementata o decrementata 1.

Conclusione

Le variabili di incremento e decremento in Bash possono essere eseguite in molti modi diversi. Qualunque sia il metodo che usi, il risultato è lo stesso.