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  
 fi

Sintaxe de Colchetes Duplos

if ((condition))  
 then  
     ### série de código vai aqui  
 fi

A 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.

OperadorDescrição
-a fileRetorna verdadeiro se o arquivo existir
-b fileRetorna verdadeiro se o arquivo existir e for um arquivo especial de bloco
-c fileRetorna verdadeiro se o arquivo existir e for um arquivo especial de caractere
-d fileRetorna verdadeiro se o arquivo existir e for um diretório
-e fileRetorna verdadeiro se o arquivo existir
-r fileRetorna verdadeiro se o arquivo existir e for legível
-s fileRetorna verdadeiro se o arquivo existir e tiver um tamanho maior que zero
-w fileRetorna verdadeiro se o arquivo existir e for gravável
-x fileRetorna verdadeiro se o arquivo existir e for executável
-N fileRetorna 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

Tomando uma decisão baseada em arquivo

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

Tomando uma decisão dinâmica baseada em arquivo

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:

OperadorDescrição
==Retorna verdadeiro se as strings forem iguais
!=Retorna verdadeiro se as strings não forem iguais
-nRetorna verdadeiro se a string a ser testada não for nula
-zRetorna 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

Declaração Condicional Baseada em String

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:

OperadorUso/Descrição
-eqIgual
-geMaior ou Igual
-gtMaior
-leMenor ou Igual
-ltMenor
-neNã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

Declaração Condicional Baseada em Aritmética

Operador aritmético para a sintaxe de parênteses duplos:

OperadorUso/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

Operador baseado em aritmética

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

Declaração Switch no linux

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

A próxima lição: Estruturas de Controle de Repetição

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.