Estruturas condicionais são fundamentais em qualquer linguagem de programação, permitindo que o script tome decisões com base em condições. No Shell Script, as palavras reservadas if, elif e else são usadas para criar ramificações condicionais. Compreender bem seu funcionamento é essencial para escrever scripts robustos e flexíveis.

Nesta aula, vamos explorar a sintaxe completa, como aninhar múltiplas condições e dicas para manter o código legível. Ao final, você verá exemplos práticos e terá exercícios para fixar o conteúdo.

Estrutura completa

A estrutura condicional completa em Bash é composta por if, elif e else. A sintaxe básica é:

if condição1; then
comando(s)
elif condição2; then
comando(s)
else
comando(s)
fi

Note que a estrutura é encerrada com fi (invertido de if). Cada bloco de comandos deve vir após um then. O elif pode ser repetido quantas vezes necessário, e o else é opcional. As condições são avaliadas em ordem; a primeira verdadeira executa seu bloco e o restante é ignorado.

Exemplo simples:

#!/bin/bash
echo "Digite um número:"
read num
if [ "$num" -gt 10 ]; then
echo "O número é maior que 10"
elif [ "$num" -eq 10 ]; then
echo "O número é igual a 10"
else
echo "O número é menor que 10"
fi

Aninhamento

É possível colocar uma estrutura condicional dentro de outra, criando aninhamento. Isso é útil quando você precisa verificar múltiplas condições que dependem umas das outras. A sintaxe é a mesma, apenas indentando para legibilidade.

Exemplo de aninhamento:

#!/bin/bash
echo "Digite sua idade:"
read idade
if [ "$idade" -ge 18 ]; then
echo "Você é maior de idade."
if [ "$idade" -ge 65 ]; then
echo "E é idoso."
else
echo "E não é idoso."
fi
else
echo "Você é menor de idade."
fi

Cuidado com aninhamentos muito profundos, pois podem tornar o código difícil de ler. Em muitos casos, é melhor reestruturar a lógica ou usar case.

Legibilidade

Para manter o código claro, siga estas boas práticas:

  • Indentação consistente: Use 2 ou 4 espaços para cada nível de aninhamento.
  • Comentários: Explique condições complexas.
  • Quebras de linha: Coloque then na mesma linha do if ou na linha seguinte, mas seja consistente.
  • Evite aninhamentos profundos: Prefira elif ou lógica combinada com operadores lógicos (&&, ||).
  • Use variáveis com nomes descritivos.

Exemplo de código mais legível:

#!/bin/bash
# Verifica se o usuário é root ou tem permissão sudo
if [ "$(id -u)" -eq 0 ]; then
echo "Executando como root."
elif groups "$USER" | grep -q sudo; then
echo "Usuário tem permissão sudo."
else
echo "Usuário comum."
fi

Exemplos

Exemplo 1: Verificar se um arquivo existe e se tem permissão de leitura.

#!/bin/bash
file="meu_arquivo.txt"
if [ -f "$file" ]; then
if [ -r "$file" ]; then
echo "Arquivo existe e pode ser lido."
else
echo "Arquivo existe mas não pode ser lido."
fi
else
echo "Arquivo não existe."
fi

Exemplo 2: Calculadora simples com elif.

#!/bin/bash
echo "Digite dois números:"
read a b
echo "Escolha a operação (+, -, *, /):"
read op
if [ "$op" = "+" ]; then
echo "Resultado: $((a + b))"
elif [ "$op" = "-" ]; then
echo "Resultado: $((a - b))"
elif [ "$op" = "*" ]; then
echo "Resultado: $((a * b))"
elif [ "$op" = "/" ]; then
if [ "$b" -ne 0 ]; then
echo "Resultado: $((a / b))"
else
echo "Divisão por zero não permitida."
fi
else
echo "Operação inválida."
fi

Boas práticas e observações finais

Sempre lembre de fechar o if com fi. Use [ ] ou [[ ]] para testes condicionais (prefira [[ ]] no Bash por ser mais seguro e flexível). Evite usar then na linha seguinte sem ponto e vírgula; a sintaxe correta é if condição; then ou if condição seguido de then na próxima linha. Teste sempre os scripts com diferentes entradas.

Referências

Exercícios

  1. Escreva um script que leia um número e verifique se é positivo, negativo ou zero.

    ✓ Resposta:
    #!/bin/bash
    echo "Digite um número:"
    read num
    if [ "$num" -gt 0 ]; then
    echo "Positivo"
    elif [ "$num" -lt 0 ]; then
    echo "Negativo"
    else
    echo "Zero"
    fi
  2. Crie um script que pergunte a idade e classifique em: criança (<12), adolescente (12-17), adulto (18-59) e idoso (60+).

    ✓ Resposta:
    #!/bin/bash
    echo "Digite sua idade:"
    read idade
    if [ "$idade" -lt 12 ]; then
    echo "Criança"
    elif [ "$idade" -le 17 ]; then
    echo "Adolescente"
    elif [ "$idade" -le 59 ]; then
    echo "Adulto"
    else
    echo "Idoso"
    fi
  3. Escreva um script que leia duas strings e compare se são iguais, uma é menor (lexicograficamente) ou maior.

    ✓ Resposta:
    #!/bin/bash
    echo "Digite a primeira string:"
    read s1
    echo "Digite a segunda string:"
    read s2
    if [ "$s1" = "$s2" ]; then
    echo "Iguais"
    elif [ "$s1" \< "$s2" ]; then
    echo "Primeira é menor"
    else
    echo "Primeira é maior"
    fi
  4. Faça um script que verifique se um ano é bissexto. Regras: divisível por 400, ou divisível por 4 e não por 100.

    ✓ Resposta:
    #!/bin/bash
    echo "Digite um ano:"
    read ano
    if [ $((ano % 400)) -eq 0 ]; then
    echo "Bissexto"
    elif [ $((ano % 4)) -eq 0 ] && [ $((ano % 100)) -ne 0 ]; then
    echo "Bissexto"
    else
    echo "Não bissexto"
    fi
  5. Crie um script que simule um sistema de login simples: leia usuário e senha e compare com valores fixos (ex: admin/1234). Use if aninhado ou elif.

    ✓ Resposta:
    #!/bin/bash
    user_correto="admin"
    senha_correta="1234"
    echo "Usuário:"
    read usuario
    echo "Senha:"
    read -s senha
    if [ "$usuario" = "$user_correto" ]; then
    if [ "$senha" = "$senha_correta" ]; then
    echo "Login bem-sucedido"
    else
    echo "Senha incorreta"
    fi
    else
    echo "Usuário incorreto"
    fi