Estruturas de Repetição em Shell Script: Guia Prático de for, while e until

No desenvolvimento de scripts Shell, as estruturas de repetição (loops) são ferramentas essenciais para automação. Elas premitem que um bloco de comandos seja executado múltiplas vezes até que uma condição específica seja aetndida. É fundamental garantir que todo loop possua uma condição de saída clara para evitar execuções infinitas que possam travar o sistema.

O Loop for

O loop for é ideal quando o número de iterações é conhecido previamente. Ele percorre uma lista de elementos e executa os comandos definidos para cada item da lista.

Sintaxe básica

for variavel in lista; do
    comandos
done

A lista pode ser definida de várias formas:

  • {1..10}: Sequência de 1 a 10.
  • {0..20..2}: De 0 a 20, saltando de 2 em 2 (números pares).
  • $(ls *.sh): Resultado de um comando.

Exemplo: Somando valores de 1 a 100

#!/bin/bash
soma_total=0
for valor in {1..100}
do
    let soma_total+=valor
done
echo "O resultado da soma é: $soma_total"

Formato estilo C

O Shell também suporta a sintaxe clássica da linguagem C, útil para manipulação direta de contadores.

#!/bin/bash
total=0
for ((i=1; i<=100; i++))
do
    ((total += i))
done
echo "Soma calculada: $total"

Aplicações Práticas com for

Renomear extensões de arquivos

Este script altera a extensão de todos os arquivos .log para .old no diretório atual.

#!/bin/bash
for arquivo in *.log
do
    nome_base=$(echo $arquivo | cut -d"." -f1)
    mv "$arquivo" "${nome_base}.old"
done

Gerador de Tabuada

#!/bin/bash
for x in {1..9}
do
    for y in $(seq $x)
    do
        echo -ne "${y}x${x}=$((x*y))\t"
    done
    echo ""
done

Monitoramento de Rede (Ping Sweep)

Verifica quais endereços IP de uma sub-rede estão ativos.

#!/bin/bash
rede="192.168.1"
for host in {1..254}
do
    {
        ping -c1 -W1 ${rede}.${host} &>/dev/null
        if [ $? -eq 0 ]; then
            echo "Host ${rede}.${host} ONLINE" >> hosts_ativos.txt
        else
            echo "Host ${rede}.${host} OFFLINE" >> hosts_inativos.txt
        fi
    } &
done
wait
echo "Varredura concluída."

O Loop while

O while executa um bloco de comandos enquanto uma condição específica for verdadeira. É útil quando não sabemos exatamente quantas iterações serão necessárias.

Sintaxe

while [ condicao ]
do
    comandos
done

Exemplo: Jogo de Adivinhação

#!/bin/bash
numero_secreto=$(( RANDOM % 100 + 1 ))
tentativas=0
palpite=0

while [ "$palpite" -ne "$numero_secreto" ]
do
    read -p "Digite um número (1-100): " palpite
    let tentativas++
    
    if [ "$palpite" -gt "$numero_secreto" ]; then
        echo "Muito alto!"
    elif [ "$palpite" -lt "$numero_secreto" ]; then
        echo "Muito baixo!"
    else
        echo "Parabéns! Você acertou em $tentativas tentativas."
    fi
done

O Loop until

Diferente do while, o until continua a execução enquanto a condição for falsa. O loop para no momento em que a condição se torna verdadeira.

Exemplo: Acumulador com until

#!/bin/bash
contador=1
resultado=0

until [ $contador -gt 100 ]
do
    resultado=$((resultado + contador))
    let contador++
done
echo "Soma total (until): $resultado"

Tags: Bash shell-script Linux automation devops

Publicado em 8-4 09:07