Introdução
Imagine que você precise assinar 1.000 cartas. Assinar uma é fácil. Assinar 1.000 é entediante e machuca a mão. Em programação, nós detestamos repetições entediantes.
Para resolver isso, usamos loops. Um loop é uma forma de dizer ao computador: faça isto repetidamente, seja para cada item de uma lista, seja até que uma condição mude.
Os loops são fundamentais para a automação porque os computadores são bons em repetir tarefas, enquanto os seres humanos não são. Se você perceber que está executando o mesmo padrão de comando várias vezes, isso geralmente indica que um loop seria útil.
Neste laboratório, você criará suas próprias linhas de montagem digitais:
- O contador: um loop que conta por você (o loop
for). - O trabalhador: um loop que processa cada arquivo de uma pilha (o loop
forcom arquivos). - O observador: um loop que continua trabalhando até que uma meta seja atingida (o loop
while).
O loop de números (loop For)
O loop for é como uma lista de verificação. Você tem uma lista de itens e executa uma ação para cada item da lista.
Esse é um dos padrões de automação mais úteis em sistemas semelhantes ao Unix. Os computadores são muito bons em repetir uma pequena ação de forma consistente, portanto os loops permitem transformar uma tarefa para um único item em uma tarefa para muitos itens sem copiar o mesmo comando várias vezes.
Vamos começar com a lista mais simples: números. Pediremos ao computador que conte de 1 a 5.
Primeiro, verifique seu espaço de trabalho:
cd ~/project
Crie um script chamado num_loop.sh:
nano num_loop.sh
Digite este código:
#!/bin/bash
for i in {1..5}; do
echo "Number: $i"
done
Decodificando a linha de montagem:
for i in {1..5}: este é o alimentador da máquina. Ele pega os números 1, 2, 3, 4 e 5 e os coloca, um por vez, na variável$i.do: inicia a máquina.echo ...: define o trabalho específico a ser executado.done: encerra o processamento deste item e volta para buscar o próximo.
A parte {1..5} é uma abreviação do Bash chamada expansão de chaves. Antes de o loop começar, o Bash a expande em uma lista de valores. Assim, o loop percorre uma lista preparada, um item por vez.
Salve (Ctrl+O) e saia (Ctrl+X).
Torne o script executável:
chmod +x num_loop.sh
./num_loop.sh
Você verá o robô contando:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
O loop de arquivos (loop For)
Contar é divertido, mas processar arquivos é útil. O loop for se torna extremamente poderoso quando combinado com curingas, como *.txt. Você pode dizer ao script: “Para cada arquivo de texto encontrado nesta pasta, faça X”.
Alguns arquivos de texto de exemplo já foram criados na sua pasta. Vamos escrever um script para encontrá-los.
Crie um novo arquivo chamado file_loop.sh:
nano file_loop.sh
Digite este código:
#!/bin/bash
echo "Listing text files:"
for file in *.txt; do
echo "Found file: $file"
done
A lógica:
Em vez dos números {1..5}, fornecemos ao loop o padrão *.txt.
O Bash examina a pasta, encontra todos os arquivos correspondentes, como data1.txt e notes.txt, e os coloca, um por vez, na variável chamada $file.
Essa correspondência acontece antes de o corpo do loop ser executado. O shell expande *.txt em uma lista de nomes de arquivo e, em seguida, o loop for percorre essa lista. É por isso que loops e padrões glob funcionam tão bem juntos em scripts de shell.
Salve e saia.
Execute o script:
chmod +x file_loop.sh
./file_loop.sh
Saída:
Listing text files:
Found file: data1.txt
Found file: data2.txt
Found file: notes.txt
Imagine que, em vez de usar apenas echo, você usasse mv para movê-los ou zip para arquivá-los. Com esse mesmo script de quatro linhas, você poderia processar 10.000 arquivos em poucos segundos!
O loop condicional (loop While)
O loop for é ótimo quando você tem uma lista, de números ou arquivos. Mas e se você não tiver uma lista? E se quiser apenas “continuar trabalhando ATÉ que algo aconteça”?
Essa é a função do loop While. Ele é como um termostato: “Enquanto o ambiente estiver frio, mantenha o aquecedor ligado”.
Vamos escrever um script que conte manualmente até 10.
Crie while_loop.sh:
nano while_loop.sh
Digite este código:
#!/bin/bash
counter=1
while [ $counter -le 10 ]; do
echo "Count: $counter"
((counter++))
done
Decodificando o termostato:
while [ $counter -le 10 ]: a condição. “O contador é menor ou igual a 10?”- Se SIM: entre no loop.
- Se NÃO: pare.
((counter++)): a atualização. Isso adiciona 1 ao contador. Importante: se você esquecer esta linha, o contador permanecerá em 1 para sempre e o script será executado indefinidamente, criando um “loop infinito”!
Isso destaca a principal diferença entre for e while. Normalmente, um loop for recebe sua sequência antecipadamente do shell. Já um loop while depende de uma condição que o script precisa atualizar corretamente durante a execução.
A sintaxe ((counter++)) é uma notação de aritmética do Bash. Ela informa ao shell que counter deve ser tratado como um número e incrementado em um. Scripts de shell frequentemente combinam processamento de texto com operações aritméticas simples, por isso essa sintaxe aparece com frequência.
Salve e saia.
Execute o script:
chmod +x while_loop.sh
./while_loop.sh
O comportamento é semelhante ao do loop for, mas a lógica é diferente. O for percorre uma lista. O while executa com base em uma condição.
Resumo
Você criou seus primeiros mecanismos de automação.
Neste laboratório, você aprendeu a usar:
- A lista de verificação (
for): processar uma lista definida de itens, como números{1..5}. - O processador em lote (
for *.txt): lidar automaticamente com todos os arquivos de um diretório. - O termostato (
while): repetir ações até que uma meta ou um limite específico seja atingido.
Esses loops são os cavalos de batalha dos scripts. Eles transformam 1.000 cliques manuais em 1 segundo de trabalho do computador.



