Shell Scripting · 8 min read · Nov 13, 2025
Shell Scripting Parte 3: Estruturas de Controle de Decisão em Scripts Shell
Oi! Já cobrimos o básico de scripting em shell, como aceitar entradas, processar dados através de operações aritméticas e gerar e exibir saídas nas partes anteriores deste tutorial (parte 1 e parte 2). Nesta parte, vamos nos aprofundar em um tópico mais avançado em uma linguagem de programação – tomar decisões em um programa, mas desta vez faremos isso usando o shell bash. Vamos começar!
Introdução
A maioria das nossas linguagens de programação hoje é capaz de tomar decisões com base nas condições que definimos. Uma condição é uma expressão que avalia a um valor booleano - verdadeiro ou falso. Qualquer programador pode tornar seu programa inteligente com base na decisão e na lógica que ele coloca em seu programa. O shell bash suporta declarações de decisão if e switch (case).
Declaração If
If é uma declaração que permite ao programador tomar uma decisão no programa com base nas condições que ele especificou. Se a condição for atendida, o programa executará certas linhas de código; caso contrário, o programa executará outras tarefas que o programador especificou. A seguir está a sintaxe suportada da declaração if no shell bash.
Sintaxe Geral
Decisão única:
if
then
### série de código vai aqui
fi Decisão dupla:
if
then
### série de código se a condição for satisfeita
else
### série de código se a condição não for satisfeita
fi Múltiplas condições if:
if
then
### série de código para condition1
elif
then
### série de código para condition2
else
### série de código se a condição não for satisfeita
fi Sintaxe de Colchetes Simples
if [ condition ]
then
### série de código vai aqui
fiSintaxe de Colchetes Duplos
if ((condition))
then
### série de código vai aqui
fiA sintaxe de colchetes simples é a sintaxe mais antiga suportada no shell bash. É usada junto com todas as declarações condicionais no Linux. Enquanto isso, a sintaxe de parênteses duplos é usada para uma declaração condicional baseada em números para fornecer uma sintaxe familiar aos programadores. Todos os tipos de declarações if precisam de uma condição especificada para executar uma tarefa.
Declarações Condicionais no Linux
Declarações condicionais são usadas junto com uma declaração de controle de decisão. Existem diferentes tipos de declarações condicionais que você pode usar no shell bash, as mais comuns são: condições baseadas em arquivos, baseadas em strings e baseadas em aritmética.
Condição Baseada em Arquivo
Condições baseadas em arquivos são expressões unárias e frequentemente usadas para examinar o status de um arquivo. A lista a seguir mostra as condições baseadas em arquivos mais comumente usadas no shell bash.
| Operador | Descrição |
| -a file | Retorna verdadeiro se o arquivo existir |
| -b file | Retorna verdadeiro se o arquivo existir e for um arquivo especial de bloco |
| -c file | Retorna verdadeiro se o arquivo existir e for um arquivo especial de caractere |
| -d file | Retorna verdadeiro se o arquivo existir e for um diretório |
| -e file | Retorna verdadeiro se o arquivo existir |
| -r file | Retorna verdadeiro se o arquivo existir e for legível |
| -s file | Retorna verdadeiro se o arquivo existir e tiver um tamanho maior que zero |
| -w file | Retorna verdadeiro se o arquivo existir e for gravável |
| -x file | Retorna verdadeiro se o arquivo existir e for executável |
| -N file | Retorna verdadeiro se o arquivo existir e foi modificado desde a última leitura |
Tomando uma Decisão Baseada em Arquivo
Vamos ter um exemplo que ilustrará como construir uma decisão baseada em arquivo em um script bash. Neste exemplo, criaremos um script que determina se o arquivo existe no diretório home.
#!/bin/bash
cd
ls
if [ -e sample.sh ]
then
echo "arquivo existe!"
else
echo "arquivo não existe"
fi
Neste exemplo, garantimos que o shell retornará ao diretório home, independentemente do nosso diretório ativo atual, usando o comando cd. Além disso, o comando ls é usado para mostrar a lista de arquivos no diretório para que possamos verificar se o arquivo realmente existe ou não. Como você pode ver, o script exibe o texto “arquivo existe!” porque o sample.sh está no diretório home.
Nota: O compilador de shell é muito rigoroso em termos de sintaxe, especialmente com espaços. Deve haver um espaço entre if e o colchete aberto e entre os colchetes e a condição.Agora vamos melhorar nosso script tornando nosso código mais dinâmico, permitindo que o usuário insira um nome de script e determine as permissões do arquivo dado.
#!/bin/bash
cd
ls -l
read -p "Digite um nome de arquivo: " filename
if [ -e $filename ]
then
echo "arquivo existe!"
if [ -r $filename ]
then
status="legível "
fi
if [ -w $filename ]
then
status=$status"gravável "
fi
if [ -x $filename ]
then
status=$status"executável"
fi
echo "permissão do arquivo: "$status
else
echo "arquivo não existe"
fi
Condição Baseada em String
Tomar decisões com base em uma entrada de string do usuário também é possível no shell bash. A condição baseada em string retorna uma expressão binária como resultado, ou seja, retorna verdadeiro se a condição especificada for satisfeita; caso contrário, retorna falso. A seguir estão os operadores condicionais baseados em string mais comumente usados:
| Operador | Descrição |
| == | Retorna verdadeiro se as strings forem iguais |
| != | Retorna verdadeiro se as strings não forem iguais |
| -n | Retorna verdadeiro se a string a ser testada não for nula |
| -z | Retorna verdadeiro se a string a ser testada for nula |
Vamos criar um script de exemplo usando a declaração condicional baseada em string. O script permitirá que o usuário insira duas strings e avalie se uma das strings é nula, se ambas as strings são iguais ou não iguais.
#!/bin/bash
read -p "Primeira String: " str1
read -p "Segunda String: " str2
if [ -z "$str1" ]
then
echo "A 1ª string é nula"
elif [ -z "$str2" ]
then
echo "A 2ª string é nula"
else
if [ $str1 == $str2 ]
then
echo "As strings são iguais"
else
echo "As strings não são iguais"
fi
fi
Condição Baseada em Aritmética
O shell fornece várias maneiras de declarar uma condição baseada em aritmética. A primeira é usando mnemônicos que podem ser usados junto com a sintaxe de colchetes simples do estilo antigo e a outra é usando símbolos amigáveis à matemática que podem ser usados junto com os parênteses duplos.
Abaixo está a lista de mnemônicos disponíveis para declarações condicionais baseadas em aritmética no shell:
| Operador | Uso/Descrição |
| -eq | Igual |
| -ge | Maior ou Igual |
| -gt | Maior |
| -le | Menor ou Igual |
| -lt | Menor |
| -ne | Não Igual |
Vamos criar um script que aceita um inteiro do usuário e determina se o inteiro é zero, negativo, ímpar ou par.
#!/bin/bash
read -p "Digite um inteiro: " int1
if [ $int1 -eq 0 ]
then
echo "Zero"
elif [ $int1 -lt 0 ]
then
echo "Negativo"
else
if [ $((int1%2)) -eq 0 ]
then
echo "Par"
else
echo "Ímpar"
fi
fi
Operador aritmético para a sintaxe de parênteses duplos:
| Operador | Uso/Descrição |
| == | Igual |
| >= | Maior ou Igual |
| > | Maior |
| <= | Menor ou Igual |
| < | Menor |
| != | Não Igual |
Agora, vamos reconstruir nosso script anterior e usar a sintaxe de parênteses duplos:
#!/bin/bash
read -p "Digite um inteiro: " int1
if (( $int1 == 0 ))
then
echo "Zero"
elif (( $int1 < 0 ))
then
echo "Negativo"
else
if (( $((int1%2)) == 0 ))
then
echo "Par"
else
echo "Ímpar"
fi
fi
Declaração Switch
A declaração switch é outro tipo de declaração condicional em scripting shell. Ela permite que um programador compare vários valores contra uma variável de uma maneira mais fácil em comparação com a declaração condicional if. A sintaxe para a declaração switch é:
case in
)
##série de código para pattern1
;;
)
##série de código para pattern2
;;
)
##série de código para patternN
;;
*)
##declarações padrão
esac
O padrão é o valor possível da variável. Cada padrão é separado por um ponto e vírgula duplo, que serve como uma declaração de quebra do padrão. A declaração switch é encerrada com uma declaração esac.
#!/bin/bash
clear
read -p "Inteiro1: " int1
read -p "Inteiro2: " int2
echo "======================"
printf "Menu: \n[a] Adição\n[b]Subtração\n[c]Multiplicação\n[d]Divisão\n"
echo "======================"
read -p "Sua escolha: " choice
res=0
case $choice in
a)
res=$((int1+int2))
;;
b)
res=$((int1-int2))
;;
c)
res=$((int1*int2))
;;
d)
res=$((int1/int2))
;;
*)
echo "Entrada inválida"
esac
echo "O resultado é: " $res
Conclusão
O shell bash fornece muitas ferramentas úteis para programadores. Assim como a maioria das linguagens de programação hoje, também é capaz de tomar decisões condicionais que tornam os scripts shell mais interativos e inteligentes. Apresentaremos estruturas de controle repetitivas na próxima série. Até a próxima.
Referências
- http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html
- https://linuxacademy.com/blog/linux/conditions-in-bash-scripting-if-statements/
A próxima lição: Estruturas de Controle de Repetição
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.