Loops em Scripts Bash

ShellBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a utilizar loops em scripts Bash. Loops são ferramentas poderosas que permitem repetir um conjunto de instruções várias vezes, tornando seus scripts mais eficientes e flexíveis. Abordaremos três tipos de loops: for, while e until. Além disso, você explorará as instruções break e continue, que oferecem controle sobre a execução do loop. Este laboratório foi projetado para iniciantes e guiará você por cada conceito passo a passo.

Este é um Laboratório Guiado, que fornece instruções passo a passo para ajudar você a aprender e praticar. Siga as instruções cuidadosamente para concluir cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 98%. Ele recebeu uma taxa de avaliação positiva de 100% dos alunos.

Configurando o Ambiente

Vamos começar configurando nosso ambiente de trabalho. Criaremos um novo diretório para armazenar todos os nossos experimentos com loops.

Abra um terminal no WebIDE. Você deve estar no diretório /home/labex/project por padrão. Se não tiver certeza, você pode navegar até lá usando este comando:

cd /home/labex/project

Agora, vamos criar um novo diretório para nossos experimentos de loop:

mkdir bash_loops
cd bash_loops

Isso cria um novo diretório chamado bash_loops e entra nele. Usaremos este diretório para todos os nossos experimentos de loop.

Por que estamos fazendo isso? Organizar seus scripts em diretórios é uma boa prática. Isso mantém seu trabalho arrumado e facilita a localização e o gerenciamento de seus arquivos.

O Loop for

O loop for é usado para iterar sobre uma lista de valores. É como dizer: "Para cada item nesta lista, faça algo". Vamos criar um script que demonstre como usar um loop for.

Crie um novo arquivo chamado for_loop.sh no diretório bash_loops:

touch for_loop.sh

Agora, abra o arquivo for_loop.sh no WebIDE e adicione o seguinte conteúdo:

#!/bin/bash

## Loop through an array of names
echo "Looping through an array:"
NAMES=("Alice" "Bob" "Charlie" "David")
for name in "${NAMES[@]}"; do
  echo "Hello, $name!"
done

echo ## Print an empty line for readability

## Loop through a range of numbers
echo "Looping through a range of numbers:"
for i in {1..5}; do
  echo "Number: $i"
done

Vamos detalhar o que este script faz:

  1. O primeiro loop percorre um array de nomes. Para cada nome no array, ele imprime uma saudação.
  2. O segundo loop usa um intervalo {1..5} para contar de 1 a 5.

A sintaxe "${NAMES[@]}" pode parecer estranha. O @ significa "todos os elementos do array", e as aspas e chaves garantem que cada elemento seja tratado como um item separado, mesmo que contenha espaços.

Salve o arquivo e torne-o executável com este comando:

chmod +x for_loop.sh

O comando chmod +x torna o arquivo executável, o que significa que você pode executá-lo como um programa.

Agora, execute o script:

./for_loop.sh

Você deverá ver uma saída como esta:

Looping through an array:
Hello, Alice!
Hello, Bob!
Hello, Charlie!
Hello, David!

Looping through a range of numbers:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5

Isso demonstra como os loops for podem iterar tanto sobre arrays quanto sobre intervalos de números.

O Loop while

O loop while executa um bloco de código enquanto uma condição especificada for verdadeira. É como dizer: "Enquanto esta condição for verdadeira, continue fazendo isso".

Crie um novo arquivo chamado while_loop.sh:

touch while_loop.sh

Abra o arquivo while_loop.sh no WebIDE e adicione o seguinte conteúdo:

#!/bin/bash

## Simple countdown using a while loop
count=5
echo "Countdown:"
while [ $count -gt 0 ]; do
  echo $count
  count=$((count - 1))
  sleep 1 ## Wait for 1 second
done
echo "Blast off!"

Vamos detalhar este script:

  1. Começamos com count=5 para definir nosso valor inicial de contagem regressiva.
  2. A condição [ $count -gt 0 ] significa "enquanto a contagem for maior que 0".
  3. Dentro do loop, imprimimos a contagem atual, diminuímos em 1 e aguardamos um segundo.
  4. Isso continua até que a contagem chegue a 0, momento em que o loop termina.

O comando sleep 1 pausa o script por 1 segundo, criando um efeito de contagem regressiva em tempo real.

Salve o arquivo e torne-o executável:

chmod +x while_loop.sh

Agora, execute o script:

./while_loop.sh

Você verá uma contagem regressiva de 5 a 1, com uma pausa de um segundo entre cada número:

Countdown:
5
4
3
2
1
Blast off!

Isso demonstra como um loop while pode repetir uma ação até que uma condição não seja mais verdadeira.

O Loop until

O loop until é semelhante ao loop while, mas com uma diferença importante: ele continua a execução até que uma condição especificada se torne verdadeira. É como dizer: "Continue fazendo isso até que esta condição seja verdadeira".

Crie um novo arquivo chamado until_loop.sh:

touch until_loop.sh

Abra o arquivo until_loop.sh no WebIDE e adicione o seguinte conteúdo:

#!/bin/bash

## Count up to 5 using an until loop
count=1
echo "Counting up to 5:"
until [ $count -gt 5 ]; do
  echo $count
  count=$((count + 1))
  sleep 1 ## Wait for 1 second
done

Vamos detalhar este script:

  1. Começamos com count=1 como nosso valor inicial.
  2. A condição [ $count -gt 5 ] significa "até que a contagem seja maior que 5".
  3. Dentro do loop, imprimimos a contagem atual, aumentamos em 1 e aguardamos um segundo.
  4. Isso continua até que a contagem se torne maior que 5, momento em que o loop termina.

Salve o arquivo e torne-o executável:

chmod +x until_loop.sh

Agora, execute o script:

./until_loop.sh

Você verá os números de 1 a 5 impressos, com uma pausa de um segundo entre cada um:

Counting up to 5:
1
2
3
4
5

Isso demonstra como um loop until pode repetir uma ação até que uma condição se torne verdadeira.

Usando as Instruções break e continue

As instruções break e continue são usadas para controlar o fluxo dos loops. O break sai de um loop prematuramente, enquanto o continue pula o restante da iteração atual e passa para a próxima.

Crie um novo arquivo chamado break_continue.sh:

touch break_continue.sh

Abra o arquivo break_continue.sh no WebIDE e adicione o seguinte conteúdo:

#!/bin/bash

## Using break to exit a loop early
echo "Demonstration of break:"
for i in {1..10}; do
  if [ $i -eq 6 ]; then
    echo "Breaking the loop at $i"
    break
  fi
  echo $i
done

echo ## Print an empty line for readability

## Using continue to skip iterations
echo "Demonstration of continue (printing odd numbers):"
for i in {1..10}; do
  if [ $((i % 2)) -eq 0 ]; then
    continue
  fi
  echo $i
done

Vamos detalhar este script:

  1. No primeiro loop, usamos o break para sair do loop quando i for igual a 6.
  2. No segundo loop, usamos o continue para pular os números pares. A condição $((i % 2)) -eq 0 verifica se um número é par (divisível por 2 sem resto).

O operador % calcula o resto da divisão. Assim, i % 2 será 0 para números pares e 1 para números ímpares.

Salve o arquivo e torne-o executável:

chmod +x break_continue.sh

Agora, execute o script:

./break_continue.sh

Você deverá ver uma saída como esta:

Demonstration of break:
1
2
3
4
5
Breaking the loop at 6

Demonstration of continue (printing odd numbers):
1
3
5
7
9

Isso demonstra como o break pode encerrar um loop antecipadamente e como o continue pode pular certas iterações com base em uma condição.

Resumo

Neste laboratório, você aprendeu sobre três tipos de loops em scripts Bash:

  1. Loops for, que iteram sobre uma lista de itens ou um intervalo de números.
  2. Loops while, que continuam enquanto uma condição for verdadeira.
  3. Loops until, que continuam até que uma condição se torne verdadeira.

Você também aprendeu sobre as instruções break e continue, que oferecem mais controle sobre seus loops.

Essas estruturas de repetição são fundamentais para muitos scripts e permitirão que você automatize tarefas repetitivas de forma eficiente. Pratique o uso desses loops em seus próprios scripts para se familiarizar com seu comportamento e casos de uso.