A utilização de estruturas de controle de fluxo, ou “Flow Control”, em scripts de shell é crucial para controlar a execução do script com base em condições específicas. Esta capacidade permite que os scripts de shell sejam mais dinâmicos e automatizados, tornando-os mais poderosos e versáteis. Nesta continuação da nossa explanação sobre o tema, vamos abordar de forma mais aprofundada como estas estruturas são aplicadas em diferentes situações nos scripts de shell.
-
Condicional IF-ELSE:
Uma das estruturas de controle de fluxo mais fundamentais é o condicional if-else. Ela permite executar diferentes blocos de código dependendo da avaliação de uma condição. No contexto de scripts de shell, a sintaxe básica é:bashif [ condição ]; then # código a ser executado se a condição for verdadeira else # código a ser executado se a condição for falsa fiAqui, “condição” é uma expressão que é avaliada como verdadeira ou falsa. Por exemplo:
bashif [ -f arquivo.txt ]; then echo "O arquivo existe." else echo "O arquivo não existe." fiEste código verifica se o arquivo “arquivo.txt” existe no diretório atual e imprime uma mensagem apropriada.
-
Loops FOR:
Os loops “for” são usados para iterar sobre uma lista de elementos e executar um bloco de código para cada elemento. A sintaxe básica é:bashfor item in lista_de_itens; do # código a ser executado para cada item donePor exemplo, para iterar sobre todos os arquivos em um diretório e imprimir seus nomes, você pode fazer:
bashfor arquivo in *; do echo "Nome do arquivo: $arquivo" doneAqui, “*” é um curinga que representa todos os arquivos no diretório atual.
-
Loops WHILE:
Os loops “while” são utilizados para repetir a execução de um bloco de código enquanto uma condição específica for verdadeira. A sintaxe básica é:bashwhile [ condição ]; do # código a ser executado enquanto a condição for verdadeira donePor exemplo, para imprimir os números de 1 a 5, você pode fazer:
bashcontador=1 while [ $contador -le 5 ]; do echo $contador contador=$((contador+1)) doneEste código imprimirá os números de 1 a 5, um por linha.
-
Interruptores CASE:
A estrutura “case” é útil quando se deseja executar diferentes blocos de código com base no valor de uma variável. Funciona de forma semelhante a uma série de declarações “if-else”. A sintaxe básica é:bashcase valor in padrão1) # código a ser executado se o valor corresponder a padrão1 ;; padrão2) # código a ser executado se o valor corresponder a padrão2 ;; *) # código a ser executado se nenhum dos padrões corresponder ;; esacPor exemplo, para determinar o dia da semana com base em um número (1 para segunda-feira, 2 para terça-feira, etc.), você pode fazer:
bashecho -n "Digite o número do dia da semana (1-7): " read dia case $dia in 1) echo "Segunda-feira" ;; 2) echo "Terça-feira" ;; 3) echo "Quarta-feira" ;; 4) echo "Quinta-feira" ;; 5) echo "Sexta-feira" ;; 6) echo "Sábado" ;; 7) echo "Domingo" ;; *) echo "Número inválido de dia" ;; esacEste código imprimirá o nome do dia da semana correspondente ao número fornecido pelo usuário.
Com essas estruturas de controle de fluxo, é possível criar scripts de shell poderosos e flexíveis, capazes de lidar com uma variedade de situações e automatizar tarefas de forma eficaz. Dominar o uso dessas estruturas é essencial para se tornar proficientemente em escrever scripts de shell eficientes e robustos.
“Mais Informações”

Claro! Vamos explorar mais a fundo cada uma dessas estruturas de controle de fluxo e como elas são aplicadas em scripts de shell:
-
Condicional IF-ELSE:
- Além da forma básica apresentada anteriormente, o condicional if-else também suporta a utilização de operadores lógicos, como && (e) e || (ou), para combinar múltiplas condições.
- Você pode usar operadores de comparação, como -eq (igual), -ne (não igual), -lt (menor que), -gt (maior que), -le (menor ou igual) e -ge (maior ou igual), para avaliar condições numéricas.
- Para comparar strings, você pode utilizar os operadores de comparação de strings, como == (igual), != (diferente), < (menor que) e > (maior que).
-
Loops FOR:
- Além de iterar sobre listas de itens, os loops “for” podem ser utilizados para percorrer uma sequência numérica. Por exemplo, para imprimir os números de 1 a 10:
bash
for ((i=1; i<=10; i++)); do echo $i done - Você pode usar o comando “seq” para gerar uma sequência numérica. Por exemplo, para imprimir os números de 1 a 10:
bash
for i in $(seq 1 10); do echo $i done
- Além de iterar sobre listas de itens, os loops “for” podem ser utilizados para percorrer uma sequência numérica. Por exemplo, para imprimir os números de 1 a 10:
-
Loops WHILE:
- Os loops “while” são úteis quando você precisa repetir uma ação até que uma condição específica seja atendida.
- É importante garantir que a condição do loop “while” eventualmente se torne falsa, caso contrário, você pode acabar com um loop infinito.
-
Interruptores CASE:
- Além dos padrões explícitos, você também pode usar padrões de curingas com o caractere “*”. Por exemplo, para lidar com diferentes extensões de arquivos:
bash
arquivo="exemplo.txt" case $arquivo in *.txt) echo "Arquivo de texto";; *.jpg|*.jpeg) echo "Imagem JPEG";; *.png) echo "Imagem PNG";; *) echo "Tipo de arquivo desconhecido";; esac - Você pode agrupar múltiplos padrões em uma única linha usando o caractere “|” como separador.
- Além dos padrões explícitos, você também pode usar padrões de curingas com o caractere “*”. Por exemplo, para lidar com diferentes extensões de arquivos:
Além dessas estruturas de controle de fluxo, também é possível combinar várias delas para criar lógica mais complexa em scripts de shell. Por exemplo, você pode usar um loop “for” dentro de outro loop “for” para iterar sobre uma matriz bidimensional, ou você pode usar um loop “while” dentro de um loop “until” para implementar uma lógica de repetição específica.
Dominar o uso dessas estruturas de controle de fluxo é essencial para escrever scripts de shell eficientes e robustos. Com prática e experimentação, você poderá automatizar uma variedade de tarefas e criar soluções sofisticadas usando apenas o poder do shell.

