Como usar laços de repetição em Shell Scripting

Laços de repetição em Shell Scripting

Em Shell Scripting, os laços de repetição são estruturas que permitem executar uma série de comandos várias vezes. Os loops ajudam a automatizar tarefas repetitivas, iterando sobre listas, variáveis, comandos e arquivos. O Bash oferece algumas estruturas de repetição essenciais: for, while, e until.

Vamos explorar cada uma, com exemplos práticos e exercícios ao final.

O laço for em shell scripting

O laço for é usado para percorrer uma lista de itens, como um conjunto de números, strings ou até mesmo arquivos. Ele executa o conjunto de comandos uma vez para cada item na lista.

Sintaxe básica do laço for

for item in lista; do
   Comandos a serem executados
done

Exemplo 1: Laço for simples

Esse exemplo exibe uma mensagem para cada nome da lista.

#!/bin/bash
for nome in Fábio Marcos Bruno Robson; do
  echo "Olá, $nome!"
done

Saída:

Olá, Fábio!
Olá, Marcos!
Olá, Bruno!
Olá Robson!

Exemplo 2: Laço for com intervalo de números

Podemos definir um intervalo de números e iterar sobre ele:

#!/bin/bash
for i in {1..5}; do
echo "$i"
done

Saída:

1
2
3
4
5

Exemplo 3: Loop for sobre arquivos em um diretório

Este exemplo percorre todos os arquivos .txt em um diretório e exibe o nome de cada arquivo.

#!/bin/bash
for arquivo in *.txt; do
echo "Encontrado arquivo: $arquivo"
done

O laço while em shell scripting

O laço while repete os comandos definidos em seu corpo enquanto uma condição testada for verdadeira. Ele é útil quando a quantidade de iterações não é definida e depende de uma condição.

Sintaxe básica do while

while [ condição ]; do
    Comandos a serem executados
done

Vejamos alguns exemplos do loop while em scripts do shell.

Exemplo 1: Loop while simples

Exibir no terminal a sequência de números de 1 a 5:

#!/bin/bash
contador=1
while [ $contador -le 5 ]; do
  echo "$contador"
  contador=$((contador + 1))
done

Saída:

1
2
3
4
5

Exemplo 2: Ler valores do terminal de forma sequencial.

O script a seguir solicita que o usuário digite um número no terminal. Ele repete a solicitação até que o usuário entre com o valor 0, momento em que o loop termina.

#!/bin/bash
# Inicializar com um valor diferente de 0 para entrar no loop
numero=-1
while [ $numero -ne 0 ]; do
  read -p "Digite um número (0 para sair): " numero
  echo "Você digitou: $numero"
done
echo "Fim do laço. Você digitou 0."

O laço until em shell scripting

O laço until é semelhante ao laço while, mas ele repete os comandos enquanto uma condição for falsa, e para a execução quando a condição se torna verdadeira.

Sintaxe básica do until

until [ condição ]; do
    Comandos a serem executados
done

Vejamos alguns exemplos.

Exemplo 1: Loop until simples

Este exemplo incrementa um contador até que ele atinja 5:

#!/bin/bash
contador=1
until [ $contador -gt 5 ]; do
  echo "$contador"
  contador=$((contador + 1))
done
echo "Sequência terminada."

Saída:

1
2
3
4
5
Sequência terminada.

Comandos de controle de loop

Existem comandos de controle que podem ser usados para manipular o comportamento de um loop:

  • break: Sai do loop imediatamente.
  • continue: Pula a iteração atual e vai para a próxima.

Vejamos como usá-los em scripts.

Exemplo: Uso de break

Este exemplo usa break para sair do loop se o contador atingir 3.

#!/bin/bash
for i in {1..5}; do
  if [ $i -eq 3 ]; then
    echo "Saindo do loop no número $i"
    break
  fi
  echo "Número: $i"
done

Saída:

Número: 1
Número: 2
Saindo do loop no número 3

Exemplo: Uso de continue

Este exemplo usa continue para pular a exibição do número 3.

#!/bin/bash
for i in {1..5}; do
  if [ $i -eq 3 ]; then
    continue
  fi
  echo "Número: $i"
done

Saída:

Número: 1
Número: 2
Número: 4
Número: 5

Excelente. Vamos propor agora alguns exercícios para você treinar o uso de laços de repetição em Shell Scripting. Resoluções sugeridas se encontram logo após a lista de exercícios.

Exercícios práticos com laços de repetição

  1. Crie um script que exiba uma contagem regressiva de 10 a 1 usando um loop for.
  2. Use um loop while para somar os números de 1 a 100 e exibir o resultado total.
  3. Escreva um script que use o loop for para percorrer arquivos .txt em um diretório e exiba o nome de cada arquivo encontrado.
  4. Use um loop until para solicitar uma senha até que o usuário digite a senha correta (“1234”).
  5. Crie um loop for que percorra os números de 1 a 10, pulando o número 5 e saindo do loop quando chegar ao número 8.

Resolução dos exercícios

Exercício 1

#!/bin/bash
for i in {10..1}; do
  echo "Contagem regressiva: $i"
done

Exercício 2

#!/bin/bash
soma=0
contador=1
while [ $contador -le 100 ]; do
  soma=$((soma + contador))
  contador=$((contador + 1))
done
echo "A soma de 1 a 100 é: $soma"

Exercício 3

#!/bin/bash
for arquivo in *.txt; do
  echo "Arquivo encontrado: $arquivo"
done

Exercício 4

#!/bin/bash
senha=""
until [ "$senha" == "1234" ]; do
  read -sp "Digite a senha: " senha
  echo
done
echo "Senha correta!"

#Exercício 5: Usar break e continue em um loop

#!/bin/bash
for i in {1..10}; do
  if [ $i -eq 5 ]; then
    continue
  fi
  if [ $i -eq 8 ]; then
    break
  fi
  echo "Número: $i"
done

Conclusão

Os laços de repetição em Shell Scripting permitem criar fluxos de trabalho eficientes para manipular dados, arquivos e outros elementos de forma automatizada.

Aprender a usar for, while e until com comandos de controle como break e continue aumenta a flexibilidade e o controle que temos sobre o código, permitindo resolver problemas de forma mais simples e eficiente.

Sobre Fábio dos Reis (1223 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*