Unix / Linux - Tipi di cicli di shell

In questo capitolo, discuteremo dei cicli di shell in Unix. Un ciclo è un potente strumento di programmazione che consente di eseguire ripetutamente una serie di comandi. In questo capitolo esamineremo i seguenti tipi di loop disponibili per i programmatori di shell:

  • Il ciclo while
  • Il ciclo for
  • Il ciclo until
  • Il ciclo di selezione

Utilizzerai loop diversi in base alla situazione. Ad esempio, il filewhileloop esegue i comandi dati finché la condizione data rimane vera; iluntil ciclo viene eseguito fino a quando una data condizione diventa vera.

Una volta acquisita una buona pratica di programmazione, acquisirai esperienza e, quindi, inizierai a utilizzare il ciclo appropriato in base alla situazione. Qui,while e for i loop sono disponibili nella maggior parte degli altri linguaggi di programmazione come C, C++ e PERL, eccetera.

Annidamento di loop

Tutti i loop supportano il concetto di annidamento, il che significa che puoi mettere un loop all'interno di un altro simile o diversi loop. Questo annidamento può arrivare fino a un numero illimitato di volte in base alle tue esigenze.

Ecco un esempio di nidificazione whileciclo continuo. Gli altri loop possono essere annidati in base ai requisiti di programmazione in modo simile:

Annidamento in loop

È possibile utilizzare un ciclo while come parte del corpo di un altro ciclo while.

Sintassi

while command1 ; # this is loop1, the outer loop
do
   Statement(s) to be executed if command1 is true

   while command2 ; # this is loop2, the inner loop
   do
      Statement(s) to be executed if command2 is true
   done

   Statement(s) to be executed if command1 is true
done

Esempio

Ecco un semplice esempio di nidificazione dei loop. Aggiungiamo un altro ciclo di conto alla rovescia all'interno del ciclo che hai usato per contare fino a nove -

#!/bin/sh

a=0
while [ "$a" -lt 10 ]    # this is loop1
do
   b="$a"
   while [ "$b" -ge 0 ]  # this is loop2
   do
      echo -n "$b "
      b=`expr $b - 1`
   done
   echo
   a=`expr $a + 1`
done

Questo produrrà il seguente risultato. È importante notare comeecho -nfunziona qui. Qui-n consente a echo di evitare di stampare un nuovo carattere di riga.

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0