Introduzione

I loop consentono di eseguire uno o più comandi più volte fino a quando non viene soddisfatta una determinata condizione. Tuttavia, a volte potrebbe essere necessario modificare il flusso del loop e terminare il loop o solo l'attuale iterazione.

In Bash, le istruzioni break e continue ti permettono di controllare l'esecuzione del ciclo. (loop)

Dichiarazione Bash break

L'istruzione break termina il ciclo corrente e passa il controllo del programma al comando che segue il ciclo terminato. Viene utilizzato per uscire da un for, while, until, o loop select. La sintassi dell'istruzione break assume la forma seguente:

break [n]

[n] è un argomento facoltativo e deve essere maggiore o uguale a 1. Quando [n] viene utilizzato, l'n-esimo ciclo di chiusura viene terminato. break 1 è equivalente a break.

Per capire meglio come utilizzare l'istruzione break, diamo un'occhiata ai seguenti esempi.

Nello script seguente, l'esecuzione del ciclo while verrà interrotta quando l'elemento iterato corrente è uguale a 2:

i=0

while [[ $i -lt 5 ]]
do
  echo "Number: $i"
  ((i++))
  if [[ $i -eq 2 ]]; then
    break
  fi
done

echo 'All Done!'
Number: 0
Number: 1
All Done!

Ecco un esempio dell'uso dell'istruzione break all'interno di cicli for nidificati.

Quando l'argomento [n] non viene fornito, break termina il ciclo di chiusura più interno. I loop esterni non sono terminati:

for i in {1..3}; do
  for j in {1..3}; do
    if [[ $j -eq 2 ]]; then
      break
    fi
    echo "j: $j"
  done
  echo "i: $i"
done

echo 'All Done!'
j: 1
i: 1
j: 1
i: 2
j: 1
i: 3
All Done!

Se si desidera uscire dal circuito esterno, utilizzare break 2. L'argomento 2 dice a break di terminare il secondo ciclo di chiusura:

for i in {1..3}; do
  for j in {1..3}; do
    if [[ $j -eq 2 ]]; then
      break 2
    fi
    echo "j: $j"
  done
  echo "i: $i"
done

echo 'All Done!'
j: 1
All Done!

Dichiarazione Bash continue

L'istruzione continue salta i comandi rimanenti all'interno del corpo del loop che racchiude l'iterazione corrente e passa il controllo del programma alla successiva iterazione del loop.

La sintassi dell'istruzione continue è la seguente:

continue [n]

L'argomento [n] è facoltativo e può essere maggiore o uguale a 1. Quando [n] viene fornito, viene ripreso l'ennesimo ciclo che lo racchiude. continue 1 è equivalente a continue.

Nell'esempio sottostante, una volta che l'attuale articolo iterata è uguale a 2, la dichiarazione continue causerà esecuzione per ritornare all'inizio del ciclo e di continuare con la prossima iterazione.

i=0

while [[ $i -lt 5 ]]; do
  ((i++))
  if [[ "$i" == '2' ]]; then
    continue
  fi
  echo "Number: $i"
done

echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!

Il seguente script stampa numeri da 1 a 50 che sono divisibili per 9.

Se un numero non è divisibile per 9, l'istruzione continue salta il comando echo e passa il controllo alla successiva iterazione del ciclo.

for i in {1..50}; do
  if [[ $(( $i % 9 )) -ne 0 ]]; then
    continue
  fi
  echo "Divisible by 9: $i"
done
Divisible by 9: 9
Divisible by 9: 18
Divisible by 9: 27
Divisible by 9: 36
Divisible by 9: 45

Conclusione

I loop sono uno dei concetti fondamentali dei linguaggi di programmazione. In linguaggi di scripting come Bash, i loop sono utili per automatizzare attività ripetitive.

L'istruzione break viene utilizzata per uscire dal ciclo corrente. L'istruzione continue viene utilizzata per uscire dall'iterazione corrente di un ciclo e iniziare l'iterazione successiva.