if, elif e else
Nesta aula, você aprenderá a usar as estruturas condicionais if, elif e else em Shell Script para controlar o fluxo do programa. Abordaremos a sintaxe completa, o aninhamento de condições e boas práticas de legibilidade, com exemplos práticos.
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)
fiNote 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"
fiAninhamento
É 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."
fiCuidado 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
thenna mesma linha doifou na linha seguinte, mas seja consistente. - Evite aninhamentos profundos: Prefira
elifou 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."
fiExemplos
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."
fiExemplo 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."
fiBoas 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
- GNU Bash Manual: Conditional Constructs
- Bash Beginners Guide: If statements
- Devhints: Bash scripting cheatsheet
- Linuxize: Bash if else statement
- ShellCheck: find bugs in your shell scripts
Exercícios
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"
fiCrie 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"
fiEscreva 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"
fiFaç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"
fiCrie 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