Shell Scripting · 7 min read · Nov 14, 2025
Shell Scripting Parte 4: Estruturas de Controle de Repetição
Bem-vindo à parte quatro da série de tutoriais sobre shell scripting da HowtoForge (Clique aqui para ler a parte 1, parte 2 e parte 3 do tutorial). Nesta parte, abordaremos as diferentes estruturas de controle de repetição do shell bash e como usar cada estrutura, fornecendo alguns exemplos. Vamos começar.
Introdução
A estrutura de controle de repetição, também conhecida como estrutura de controle de loop, é um tipo de estrutura de controle em linguagens de programação que é usada para simplificar tarefas repetitivas ou recursivas. As instruções de loop otimizam qualquer código, fornecendo uma maneira de minimizar o código, tornando-o mais fácil de solucionar do que um código não estruturado que fornece a mesma saída. Existem três tipos de instruções de loop que o shell bash suporta - os loops for, while e until.
Loops For
O loop for é uma instrução de loop que usa a palavra-chave for para declarar uma instrução repetitiva. O bash suporta diferentes sintaxes para a instrução de loop for:
Sintaxe 1: Estrutura For-in
for in
do
#### sua instrução aqui
done
Essa sintaxe começa com a palavra-chave for, seguida por um nome de variável, a palavra-chave in e a lista de valores possíveis para a variável. Cada valor na lista será separado por um espaço e o início das linhas de código que serão repetidas é definido em do e termina com a palavra-chave done.
Vamos criar uma instrução de loop for simples que permitirá ao usuário inserir 5 valores e obter a soma dos números:
#!/bin/bash
result=0;
input=0;
for var in 1 2 3 4 5
do
printf "Input integer %d : " $var
read input
result=$((result+input))
done
echo "o resultado é " $result
Neste exemplo, a variável var serve como o contador do nosso loop. Seu valor é definido na lista de números após a palavra-chave in e o shell muda os valores da variável var após cada execução do ciclo na instrução de loop. Como há apenas cinco valores inteiros em nossa lista, o shell executará os códigos dentro da nossa instrução de loop apenas cinco vezes.
Sintaxe 2: Instrução de Loop For com Valores de Lista de Strings
Você também pode declarar uma variável que conterá a lista de itens para seu contador. Por exemplo, considere o seguinte código:
#!/bin/bash
list="var1 var2 var3 var4"
var=""
mkdir sample
cd sample
echo criando os "diretórios...."
for var in $list
do
mkdir $var
done
A linha list=”var1 var2 var3 var4” define os valores da variável list. Em seguida, foi atribuído a var na linha for var in $list e, finalmente, os diretórios são criados na linha mkdir $var.
Sintaxe 3: Instrução de Loop For com Lista como um Arquivo
Você também pode recuperar uma lista de um arquivo existente para ser usada na instrução de loop for em vez de declará-la dentro do seu código usando o comando cat. Por exemplo, abra seu editor de texto favorito e liste pelo menos cinco nomes de diretórios.

Em seguida, abra uma nova aba no mesmo editor de texto e crie um novo script. Este script deve ser salvo no mesmo diretório onde a lista de diretórios que você criou anteriormente está salva.
#!/bin/bash
dirList=$(cat list)
echo "criando diretórios...."
for var in $dirList
do
mkdir $var
done
Este exemplo se torna útil quando você precisa criar centenas de diretórios no seu computador Linux, não acha?
Sintaxe 4: Sintaxe Semelhante ao C
for((initialization; boolean_test; increment/decrement))
do
#### seu código vai aqui
doneTalvez, a estrutura de loop for mais familiar que o shell suporta seja a estrutura semelhante ao C. O loop começa com a inicialização da variável contador e, em seguida, o shell avalia a expressão booleana declarada após a inicialização. Se o resultado da expressão booleana for verdadeiro, o shell executará o conjunto de instruções dentro da cláusula do; caso contrário, ele termina a instrução de loop e prossegue para a linha após a palavra-chave done. O shell prosseguirá para a próxima iteração através da instrução de incremento ou decremento declarada após o teste booleano. Como exemplo, vamos reconstruir nosso primeiro exemplo usando essa estrutura.
#!/bin/bash
result=0
input=0
for((var=1;var<=5;var++))
do
printf "Input integer %d : " $var
read input
result=$((result+input))
done
echo $result
Instrução de Loop While
A instrução while é um tipo de estrutura repetitiva no bash que utiliza a palavra-chave while. Ao contrário da sintaxe do tipo C da estrutura de loop for, a estrutura de controle de repetição while separa a inicialização, o teste booleano e a instrução de incremento/decremento.
Sintaxe 1: Estrutura While com Instruções Condicionais Baseadas em Símbolos Aritméticos
while(condition)
do
###seu código vai aqui
done Para ser capaz de diferenciar while das outras instruções de loop, vamos construir nosso primeiro exemplo para a instrução while.
#!/bin/bash
result=0
input=0
var=1
while((var <= 5))
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "o resultado é " $result
Olhando para nosso exemplo, a instrução while começa com a inicialização da nossa variável contador var. Em seguida, o teste booleano é declarado após a palavra-chave while e o conjunto de instruções a serem repetidas será declarado dentro das instruções do e done. Nas instruções while, o interpretador só começará e executará a repetição de códigos se o resultado do teste booleano for verdadeiro. Por outro lado, a instrução de loop só terminará a iteração de códigos quando a expressão booleana resultar em falso.
Sintaxe 2: Instrução de Loop While com Instrução Condicional Baseada em Mnemônicos
while [ ]
do
####seu código vai aqui
done Você também pode declarar uma instrução condicional baseada em mnemônicos dentro de uma instrução de loop while. Para a declaração, um colchete será usado em vez de parênteses. (Revise as instruções condicionais baseadas em mnemônicos aqui) Por exemplo:
#!/bin/bash
var=1;
while [ $var -le 5 ]
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "o resultado é " $result
Sintaxe 3: Instrução de Loop While com Instrução Condicional Baseada em Arquivo
while read
do
####seu código vai aqui
done < Assim como fizemos na instrução de loop for, você também pode abrir um arquivo de texto e associá-lo na instrução de loop while. Por exemplo:
#!/bin/bash
mkdir sample2
cd sample2
echo "criando diretórios..."
while read var
do
mkdir $var
done

Neste exemplo, eu reutilizei a lista que criamos há pouco e criei um novo script no mesmo diretório. Observe que, se seu arquivo de texto estiver localizado em um diretório diferente, você deve fornecer o caminho exato do arquivo após o símbolo <.
Instrução de Loop Until
Outro tipo de instrução de loop que o bash suporta é a estrutura until. A instrução until executa cada comando dentro do loop até que a expressão booleana declarada resulte em falso. É o oposto completo da instrução while.
Sintaxe 1: Until Loop com Instrução Condicional Baseada em Símbolos Aritméticos
until (())
do
####conjunto de comandos
done Vamos ter um exemplo:
result=0
input=0
var=1
until((var > 5))
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "o resultado é " $result
Sintaxe 2: Instrução de Loop Until com Instrução Condicional Baseada em Mnemônicos
until [ ]
do
####seu código vai aqui
done Como a instrução until é apenas o oposto da instrução de loop while, você também pode declarar uma instrução condicional baseada em mnemônicos na estrutura until. No entanto, para terminar, você deve declarar uma instrução condicional oposta - ou seja, fazer com que a instrução condicional avalie como falsa.
!/bin/bash
result=0
input=0
var=1
until [ $var -gt 5 ]
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "o resultado é " $result
Conclusão
Esta parte do tutorial cobre as três estruturas de loop que o bash suporta - as instruções de loop for, while e until. Cada uma dessas instruções tem diferentes estruturas, usos e vantagens. O bash suporta diferentes estruturas, proporcionando mais opções aos programadores e, assim, tornando o shell scripting fácil de codificar.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.