Aula 12 — Repita enquanto a condição for verdadeira: contadores, menus interativos e leitura de arquivos linha por linha
🚦 O que é um Loop while?
O while repete um bloco de comandos enquanto uma condição for verdadeira. A cada iteração a condição é testada novamente; quando se torna falsa, o loop encerra.
Estrutura básica
sintaxe
while [ condição ]
do
comandos
# IMPORTANTE: modifique a variável de controle!done
Como funciona
Testa a condição
Se verdadeira → executa os comandos e volta ao passo 1
Se falsa → sai do loop e continua o script
⚠️ Regra de ouro: sempre modifique a variável de controle dentro do loop. Se a condição nunca mudar, o loop será infinito ∞ e o script trava. Use Ctrl+C para interromper.
Quando CONTADOR chega a 6, a condição é falsa e o loop encerra
🔢 Operadores de Comparação
Os operadores abaixo são usados dentro de [ ] para comparar valores numéricos e definir quando o loop para.
Operador
Significado
Dica de memória
-lt
Menor que (<)
Less Than
-le
Menor ou igual (≤)
Less or Equal
-gt
Maior que (>)
Greater Than
-ge
Maior ou igual (≥)
Greater or Equal
-eq
Igual (=)
EQual
-ne
Diferente (≠)
Not Equal
Exemplo: contagem regressiva
regressiva.sh
N=5
while [ $N-gt 0 ]
doecho"$N..."N=$(($N - 1))
doneecho"Lançar!"
➕ Operações Matemáticas com $(( ))
A construção $(( )) realiza cálculo aritmético no Bash e é fundamental para modificar o contador em loops while.
Operação
Sintaxe
Somar 1
N=$(($N + 1))
Subtrair 1
N=$(($N - 1))
Multiplicar
N=$(($N * 2))
Dividir
N=$(($N / 2))
Resto
N=$(($N % 3))
Exemplo: acumulador de soma
somador.sh
SOMA=0
N=1
while [ $N-le 5 ]
doSOMA=$(($SOMA + $N))
echo"Soma após $N: $SOMA"N=$(($N + 1))
doneSoma após 1: 1Soma após 2: 3Soma após 3: 6Soma após 4: 10Soma após 5: 15
♾️ while true e break
while true cria um loop que nunca termina por si só. O comando break funciona como a saída de emergência: encerra o loop imediatamente quando executado.
Estrutura com break
sintaxe
while true
do
comandos
if [ condição de saída ]; thenbreakfidone
Exemplo: repetir até o usuário digitar “sair”
loop-usuario.sh
while true
doread-p"Digite algo (sair para parar): "Rif [ "$R" = "sair" ]; thenecho"Tchau!"breakfiecho"Você disse: $R"done
💡 while true é ideal para menus que precisam continuar até o usuário escolher sair. Sempre garanta que exista pelo menos um caminho que execute break.
🎮 break e continue
Esses dois comandos controlam o fluxo dentro de qualquer loop Bash.
N=0
while [ $N-lt 5 ]
doN=$(($N + 1))
if [ $N-eq 3 ]; thencontinuefiecho"$N"done# Saída: 1 2 4 5
📌 Diferença:break encerra o loop completamente; continue pula apenas a iteração atual e volta ao teste da condição.
💬 Interação com Usuário
O comando read captura a entrada do teclado e armazena em uma variável. Combinado com while true, permite loops que dependem completamente da resposta do usuário.
Somador interativo
somador-interativo.sh
SOMA=0
while true
doread-p"Número (0 para sair): "Nif [ "$N" = "0" ]; thenbreakfiSOMA=$(($SOMA + $N))
echo"Total até agora: $SOMA"doneecho"Soma final: $SOMA"
Jogo de adivinhação
adivinha.sh
SECRETO=7
TENT=0
echo"Adivinhe o número (1-10)!"while true
doTENT=$(($TENT + 1))
read-p"Palpite: "Pif [ $P-eq$SECRETO ]; thenecho"Acertou em $TENT tentativa(s)!"breakelif [ $P-lt$SECRETO ]; thenecho"Maior!"elseecho"Menor!"fidone
🍔 Menu Interativo
A combinação while true + case + break é o padrão clássico para menus de sistema que permanecem ativos até o usuário optar por sair.
menu.sh
#!/bin/bash# Menu interativo com while + casewhile true
doclearecho"╔═══════════════════════╗"echo"║ MENU PRINCIPAL ║"echo"╠═══════════════════════╣"echo"║ 1) Ver data/hora ║"echo"║ 2) Ver usuário ║"echo"║ 3) Listar arquivos ║"echo"║ 0) Sair ║"echo"╚═══════════════════════╝"read-p"Opção: "OPCcase"$OPC"in
1) date ;;
2) whoami ;;
3) ls-la ;;
0) echo"Tchau!"; break ;;
*) echo"Opção inválida!" ;;
esacread-p"Pressione Enter para continuar..."done
💡 Padrão profissional:while true + case + break é amplamente usado em scripts de administração de sistemas Linux para menus de configuração e manutenção.
📄 Lendo Arquivos Linha por Linha
O padrão while read é a forma correta de processar arquivos linha a linha no Bash. Ao contrário do for (que separa por espaços), este padrão preserva a linha inteira.
Estrutura
sintaxe
whilereadLINHAdoecho"$LINHA"done < arquivo.txt
Exemplo: numerar usuários de um arquivo
listar-usuarios.sh
# usuarios.txt contém: "Ana Silva", "Pedro Santos"NUM=1
whilereadNOMEdoecho"$NUM: $NOME"NUM=$(($NUM + 1))
done < usuarios.txt
1: Ana Silva2: Pedro Santos
📌 FOR vs WHILE READ:for NOME in $(cat arq) trata “Ana Silva” como dois itens. while read NOME trata a linha inteira como um só item. Para nomes compostos, sempre use while read.
🚀 Projeto: Contador de Palavras
Exemplo completo que combina while true, validação com -z, break e um for interno para contar palavras digitadas pelo usuário.
conta-palavras.sh
#!/bin/bash# Conta palavras em frases digitadasecho"CONTADOR DE PALAVRAS"echo"(Enter vazio para encerrar)"TOTAL_FRASES=0
TOTAL_PALAVRAS=0
while true
doread-p"Frase: "FRASEif [ -z"$FRASE" ]; thenbreakfiPALAVRAS=0
forPin $FRASE; doPALAVRAS=$(($PALAVRAS + 1))
doneTOTAL_FRASES=$(($TOTAL_FRASES + 1))
TOTAL_PALAVRAS=$(($TOTAL_PALAVRAS + $PALAVRAS))
echo"Frase $TOTAL_FRASES: $PALAVRAS palavra(s)"doneecho"Total: $TOTAL_FRASES frases, $TOTAL_PALAVRAS palavras"
-z "$FRASE" — testa se a string está vazia (Enter sem digitar)
for P in $FRASE — itera sobre cada palavra da frase
Acumuladores TOTAL_FRASES e TOTAL_PALAVRAS somam a cada iteração
⚖️ for vs while
🔁 Use for quando…
Sabe quantas vezes repetir
Tem uma lista de itens
Processa arquivos com wildcard
Sequências numéricas simples
🔄 Use while quando…
Não sabe quantas vezes repetir
Depende de uma condição variável
Precisa de entrada do usuário
Ler arquivos linha por linha
resumo
# FOR — lista conhecidaforiin 1 2 3 4 5
forarqin *.txt
# WHILE — condição dinâmicawhile [ $n-lt 10 ]
whilereadlinha
💡 Regra simples: “Tenho uma lista de itens?” → use for. “Preciso de uma condição para parar?” → use while. Os dois se complementam e podem ser combinados.
🎯 Exercício — Arraste e Conecte
Relacione cada elemento do while à sua função.
Função
Encerra o bloco do loop
Sai do loop imediatamente
Pula para a próxima iteração
Compara se é menor ou igual
Testa se uma string está vazia
Lê arquivo linha por linha
Elemento
done
break
continue
-le
-z
while read LINHA
🛠️ Atividade Prática — Loops WHILE
⏱ ~30 min💻 Terminal Bash📸 Tirar screenshot da saída
1
Contador básico
Escreva contador.sh com dois loops while: crescente de 1 a 10 e contagem regressiva de 10 a 1:
Escreva menu.sh com while true + case. O menu reaparece após cada ação até o usuário escolher sair:
~/scripts/menu.sh
#!/bin/bashwhile true; doecho"--- MENU ---"echo"1) Data 2) Disco 3) Usuário 4) Sair"read-p"Opção: "OPcase"$OP"in
1) date ;;
2) df-h ;;
3) whoami ;;
4) echo"Saindo..."; break ;;
*) echo"Opção inválida" ;;
esacdone
bash — sessão de uso
usuario@servidor:~/scripts$./menu.sh--- MENU ---1) Data 2) Disco 3) Usuário 4) SairOpção: 1Sáb Mar 22 10:30:00 -03 2026--- MENU ---1) Data 2) Disco 3) Usuário 4) SairOpção: 4Saindo...
3
Leitura de arquivo
Crie nomes.txt com 5 nomes e escreva ler-nomes.sh com while read exibindo cada nome numerado e seu comprimento:
📌 Para refletir: o loop while brilha em situações onde o número de repetições depende de uma condição em tempo de execução. Menus, jogos e processamento de arquivos são os casos de uso mais frequentes em scripts de administração Linux.
❓ Verifique seu Conhecimento
Qual a diferença entre while e until em Bash?
Awhile executa uma vez, until executa várias
Bwhile executa enquanto a condição é verdadeira; until executa enquanto é falsa
Cuntil é mais rápido que while
DNão há diferença prática entre eles
✓ while [ condição ]: continua enquanto verdadeiro. until [ condição ]: continua enquanto falso (para quando torna-se verdadeiro).
Como criar um loop infinito em Bash com while?
Awhile (forever); do comandos; done
Bwhile loop; do comandos; done
Cwhile true; do comandos; done
Dwhile :infinite:; do comandos; done
✓ while true ou while : criam loops infinitos. Sempre inclua uma condição de saída com break para não travar o sistema.
O que faz read -t 5 resposta em um script?
ALê entrada com timeout de 5 segundos
BRepete a leitura 5 vezes
CLê no máximo 5 caracteres
DAguarda 5 segundos antes de ler
✓ read -t N define um timeout: se o usuário não digitar em N segundos, o comando retorna com código de erro. Útil em scripts de monitoramento.
Qual comando Bash monitora continuamente o uso de disco a cada 5 segundos com while?
Awhile disk; do df -h; wait 5; done
Bwhile monitor; do check-disk; sleep 5; done
Cloop disk-monitor --interval 5
Dwhile true; do df -h; sleep 5; done
✓ Padrão de monitoramento: while true; do comando; sleep N; done. Ctrl+C para interromper. Redirecione para log com >> /var/log/monitor.log.