Unix / Linux - Controllo del ciclo della shell

In questo capitolo, discuteremo del controllo del ciclo della shell in Unix. Finora hai esaminato la creazione di loop e il lavoro con i loop per svolgere diverse attività. A volte è necessario interrompere un ciclo o saltare le iterazioni del ciclo.

In questo capitolo impareremo a seguire due istruzioni che sono usate per controllare i cicli della shell -

  • Il break dichiarazione

  • Il continue dichiarazione

Il ciclo infinito

Tutti i loop hanno una durata limitata e vengono fuori una volta che la condizione è falsa o vera a seconda del loop.

Un ciclo può continuare all'infinito se la condizione richiesta non viene soddisfatta. Un ciclo che viene eseguito per sempre senza terminare viene eseguito per un numero infinito di volte. Per questo motivo, tali loop sono chiamati loop infiniti.

Esempio

Ecco un semplice esempio che utilizza l'estensione while loop per visualizzare i numeri da zero a nove -

#!/bin/sh

a=10

until [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

Questo ciclo continua per sempre perché a è sempre greater than o equal to 10 e non è mai inferiore a 10.

La dichiarazione di rottura

Il breakL'istruzione viene utilizzata per terminare l'esecuzione dell'intero ciclo, dopo aver completato l'esecuzione di tutte le righe di codice fino all'istruzione break. Quindi passa al codice che segue la fine del ciclo.

Sintassi

Il seguente break è usata per uscire da un ciclo -

break

Il comando break può essere utilizzato anche per uscire da un ciclo annidato utilizzando questo formato -

break n

Qui n specifica il nth che racchiude il ciclo all'uscita da.

Esempio

Ecco un semplice esempio che mostra che il ciclo termina non appena a diventa 5 -

#!/bin/sh

a=0

while [ $a -lt 10 ]
do
   echo $a
   if [ $a -eq 5 ]
   then
      break
   fi
   a=`expr $a + 1`
done

Dopo l'esecuzione, riceverai il seguente risultato:

0
1
2
3
4
5

Ecco un semplice esempio di ciclo for annidato. Questo script esce da entrambi i cicli sevar1 equals 2 e var2 equals 0 -

#!/bin/sh

for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ]
      then
         break 2
      else
         echo "$var1 $var2"
      fi
   done
done

Dopo l'esecuzione, riceverai il seguente risultato. Nel ciclo interno, hai un comando di interruzione con l'argomento 2. Ciò indica che se una condizione è soddisfatta dovresti uscire dal ciclo esterno e infine anche dal ciclo interno.

1 0
1 5

L'istruzione continue

Il continue dichiarazione è simile a break comando, tranne per il fatto che fa terminare l'iterazione corrente del ciclo, anziché l'intero ciclo.

Questa istruzione è utile quando si è verificato un errore ma si desidera provare a eseguire l'iterazione successiva del ciclo.

Sintassi

continue

Come con l'istruzione break, è possibile fornire un argomento intero al comando continue per saltare i comandi dai cicli annidati.

continue n

Qui n specifica il nth che racchiude il ciclo da cui continuare.

Esempio

Il ciclo seguente fa uso di continue istruzione che ritorna dall'istruzione continue e inizia l'elaborazione dell'istruzione successiva -

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS
do
   Q=`expr $NUM % 2`
   if [ $Q -eq 0 ]
   then
      echo "Number is an even number!!"
      continue
   fi
   echo "Found odd number"
done

Dopo l'esecuzione, riceverai il seguente risultato:

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number