forAula 11 — Repetição inteligente: percorra listas, arquivos e sequências automatizando tarefas no Shell Script
Um loop é uma estrutura que executa um bloco de comandos repetidamente para cada elemento de uma lista. No Bash, o for é o loop mais usado: para cada item da lista, o bloco entre do e done é executado uma vez.
📌 O princípio do for: "Para cada item da lista, faça isso." Use loops para processar listas de arquivos, gerar sequências, automatizar renomeamentos e muito mais.
for| Palavra-chave | Função |
|---|---|
for | Inicia o loop |
VARIAVEL | Recebe cada valor da lista a cada iteração |
in | Separa a variável da lista de valores |
do | Inicia o bloco de comandos |
done | Encerra o bloco (obrigatório!) |
💡 Regra de ouro: espaços separam os itens da lista — a b c é uma lista de 3 elementos. Sempre feche o loop com done.
A lista pode conter qualquer palavra ou string. Cada token separado por espaço é tratado como um item.
Combinando o for com wildcards é possível processar automaticamente todos os arquivos que correspondem a um padrão, sem precisar listar cada nome manualmente.
| Padrão | Combina com… |
|---|---|
*.txt | Todos os arquivos .txt |
foto* | Arquivos que começam com "foto" |
*2024* | Arquivos que contêm "2024" |
* | Todos os arquivos do diretório |
*.jpg *.png | Imagens jpg e png |
⚠️ Sempre use aspas: "$ARQ" protege nomes de arquivo que contêm espaços. Sem aspas, um arquivo chamado meu texto.txt seria tratado como dois itens separados.
{ }A expansão de chaves gera sequências numéricas ou alfabéticas diretamente no Bash, sem precisar de comandos externos.
| Sintaxe | Resultado |
|---|---|
{1..5} | 1 2 3 4 5 |
{5..10} | 5 6 7 8 9 10 |
{A..E} | A B C D E |
{2..10..2} | 2 4 6 8 10 (passo 2) |
{a..z} | todas as letras minúsculas |
💡 As chaves são expandidas pelo próprio Bash antes da execução, sendo mais rápidas que o comando seq. Também funcionam com letras: {a..f}.
seqO seq gera sequências numéricas com controle de início, fim e passo. É útil quando os valores são definidos por variáveis (as chaves não suportam variáveis).
| Comando | Resultado |
|---|---|
seq 5 | 1 2 3 4 5 |
seq 3 7 | 3 4 5 6 7 |
seq 2 2 10 | 2 4 6 8 10 |
seq 10 -1 1 | 10 9 8 … 1 (regressivo) |
📌 A construção $(comando) executa o comando e usa sua saída como a lista do for. Essa técnica funciona com qualquer comando que produza palavras na saída.
O Bash também suporta a sintaxe de loop for tradicional das linguagens C/Java, com inicialização, condição e incremento explícitos.
| Operador | Significado | Exemplo |
|---|---|---|
i++ | Incrementa 1 | 0, 1, 2, 3… |
i-- | Decrementa 1 | 5, 4, 3, 2… |
i+=2 | Incrementa 2 | 0, 2, 4, 6… |
i*=2 | Multiplica por 2 | 1, 2, 4, 8… |
Combinando $(cat arquivo) com o for, o loop itera sobre cada palavra do arquivo. É útil para processar listas armazenadas em disco.
⚠️ Atenção: o for separa por espaços, não por linhas. “Nome Completo” vira dois itens (Nome e Completo). Para processar linha por linha, use while read.
Exemplo completo que combina wildcards, variáveis, incremento e validação com if para renomear automaticamente uma coleção de imagens em sequência.
*.jpg *.png — percorre imagens de ambas as extensões[ -f "$FOTO" ] — garante que o arquivo existe antes de renomear${FOTO##*.} — extrai a extensão do nome original$CONTADOR — gera o número sequencial em cada iteração📋 Checklist: use nomes descritivos • sempre aspas em "$VAR" • valide com -f antes de operar arquivos • teste o script com echo antes de executar ações destrutivas.
forRelacione cada sintaxe do for à sua descrição.
{1..10}
*.txt
$(seq 1 5)
((i=1;i<=5;i++))
done
$(cat arq.txt)
backup.sh que crie a pasta backup/ e copie todos os arquivos .txt do diretório atual para ela usando for com wildcard. Exiba o nome de cada arquivo copiado.sequencias.sh com três loops: um com {1..10}, um com $(seq 0 2 20) (pares até 20) e uma contagem regressiva de 5 até 1 com sleep 1.criar-estrutura.sh que use for ANO in {2022..2025} para criar pastas relatorio_ANO e dentro de cada uma as subpastas jan, fev e mar com outro for aninhado.renomeador.sh da aula para renomear arquivos .txt no formato doc_001.txt, doc_002.txt, usando printf para formatar o número com zeros à esquerda: printf "%03d" $CONTADOR.for é a ferramenta central de automação em Shell Script. Combinar wildcards, sequências e substituição de comandos permite processar dezenas ou centenas de arquivos com apenas algumas linhas de código.
Qual a sintaxe correta de um loop for em Bash para iterar sobre uma lista?
for item in valor1 valor2 valor3; do echo $item; done. Use $(seq 1 10) para sequências numéricas.O que o comando seq 1 5 retorna?
seq 1 5 gera 1 2 3 4 5. Use seq 1 2 10 para pular de 2 em 2. Muito útil em for i in $(seq 1 10).Como processar todos os arquivos .txt de um diretório com for?
for file in *.txt usa expansão de glob — o shell substitui *.txt pela lista de arquivos correspondentes antes de executar o loop.O que faz o comando break dentro de um loop for?
break sai do loop. continue pula para a próxima iteração. Use break 2 para sair de dois loops aninhados.