Unix / Linux - Tipos de Shell Loop

Neste capítulo, discutiremos os loops de shell no Unix. Um loop é uma ferramenta de programação poderosa que permite executar um conjunto de comandos repetidamente. Neste capítulo, examinaremos os seguintes tipos de loops disponíveis para programadores de shell -

  • O loop while
  • O laço for
  • O loop até
  • O loop de seleção

Você usará diferentes loops com base na situação. Por exemplo, owhileo loop executa os comandos fornecidos até que a condição fornecida permaneça verdadeira; auntil o loop é executado até que uma determinada condição se torne verdadeira.

Depois de ter uma boa prática de programação, você ganhará a experiência e, portanto, começará a usar o loop apropriado com base na situação. Aqui,while e for loops estão disponíveis na maioria das outras linguagens de programação, como C, C++ e PERLetc.

Loops de aninhamento

Todos os loops suportam o conceito de aninhamento, o que significa que você pode colocar um loop dentro de outro semelhante ou em diferentes loops. Esse aninhamento pode ir até um número ilimitado de vezes com base em sua necessidade.

Aqui está um exemplo de aninhamento whileciclo. Os outros loops podem ser aninhados com base nos requisitos de programação de forma semelhante -

Aninhando enquanto Loops

É possível usar um loop while como parte do corpo de outro loop while.

Sintaxe

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

Exemplo

Aqui está um exemplo simples de aninhamento de loop. Vamos adicionar outro loop de contagem regressiva dentro do loop que você costumava contar até 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

Isso produzirá o seguinte resultado. É importante observar comoecho -nfunciona aqui. Aqui-n opção permite que o eco evite imprimir um novo caractere de linha.

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