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
- Crie um script que exiba uma contagem regressiva de 10 a 1 usando um loop for.
- Use um loop while para somar os números de 1 a 100 e exibir o resultado total.
- Escreva um script que use o loop for para percorrer arquivos .txt em um diretório e exiba o nome de cada arquivo encontrado.
- Use um loop until para solicitar uma senha até que o usuário digite a senha correta (“1234”).
- 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.