Pular para o conteúdo principal

Capítulo 6.3 - Estruturas de Controle

Objetivos de Aprendizagem​

Ao final deste capítulo, você será capaz de:

  • Utilizar condições if/else
  • Implementar loops for e while
  • Utilizar case para seleção múltipla
  • Compreender os operadores de teste
  • Gerenciar erros

Condições if/else​

Sintaxe Básica​

#!/bin/bash
# if simples
if [ condição ]; then
comandos
fi

# if/else
if [ condição ]; then
comandos_se_verdadeiro
else
comandos_se_falso
fi

# if/elif/else
if [ condição1 ]; then
comandos1
elif [ condição2 ]; then
comandos2
else
comandos3
fi

Operadores de Teste​

Arquivos:

[ -f arquivo ]      # Arquivo existe e é regular
[ -d diretorio ] # Diretório existe
[ -e caminho ] # Caminho existe
[ -r arquivo ] # Legível
[ -w arquivo ] # Gravável
[ -x arquivo ] # Executável
[ -s arquivo ] # Não vazio

Strings:

[ -z "$VAR" ]       # Vazio
[ -n "$VAR" ] # Não vazio
[ "$VAR1" = "$VAR2" ] # Igual
[ "$VAR1" != "$VAR2" ] # Diferente

Números:

[ $A -eq $B ]       # Igual
[ $A -ne $B ] # Diferente
[ $A -lt $B ] # Menor
[ $A -le $B ] # Menor ou igual
[ $A -gt $B ] # Maior
[ $A -ge $B ] # Maior ou igual

Lógica:

[ condição1 ] && [ condição2 ]  # E
[ condição1 ] || [ condição2 ] # OU
[ ! condição ] # NÃO

Exemplos​

#!/bin/bash
# Verificar arquivo
if [ -f "/etc/passwd" ]; then
echo "Arquivo existe"
else
echo "Arquivo não existe"
fi

# Verificar usuário
if [ "$USER" = "root" ]; then
echo "Você é root"
elif [ "$UID" -eq 0 ]; then
echo "Você é root (por UID)"
else
echo "Você é $USER"
fi

# Condições múltiplas
if [ -f "$1" ] && [ -r "$1" ]; then
echo "Arquivo existe e é legível"
fi

Loop for​

Sintaxe​

#!/bin/bash
# Lista de valores
for item in valor1 valor2 valor3; do
echo "Item: $item"
done

# Percorrer argumentos
for arg in "$@"; do
echo "Argumento: $arg"
done

# Sequência numérica
for i in {1..10}; do
echo "Número: $i"
done

# Com incremento
for i in {1..10..2}; do
echo "Número: $i"
done

# Estilo C
for ((i=1; i<=10; i++)); do
echo "Número: $i"
done

Exemplos​

#!/bin/bash
# Percorrer arquivos
for arquivo in *.txt; do
echo "Processando: $arquivo"
# Processamento...
done

# Percorrer diretórios
for dir in /home/*; do
if [ -d "$dir" ]; then
echo "Diretório: $dir"
fi
done

# Percorrer array
FRUTAS=("maçã" "banana" "laranja")
for fruta in "${FRUTAS[@]}"; do
echo "Fruta: $fruta"
done

Loop while​

Sintaxe​

#!/bin/bash
# while simples
while [ condição ]; do
comandos
done

# while com leitura
while read linha; do
echo "Linha: $linha"
done < arquivo.txt

# while infinito
while true; do
comandos
sleep 1
done

Exemplos​

#!/bin/bash
# Contador
i=1
while [ $i -le 10 ]; do
echo "Número: $i"
i=$((i + 1))
done

# Ler arquivo linha por linha
while IFS= read -r linha; do
echo "Linha: $linha"
done < /etc/passwd

# Menu interativo
while true; do
echo "1. Opção 1"
echo "2. Opção 2"
echo "3. Sair"
read -p "Escolha: " escolha

case $escolha in
1) echo "Opção 1" ;;
2) echo "Opção 2" ;;
3) break ;;
*) echo "Escolha inválida" ;;
esac
done

Loop until​

#!/bin/bash
# until (até que a condição seja verdadeira)
i=1
until [ $i -gt 10 ]; do
echo "Número: $i"
i=$((i + 1))
done

case - Seleção Múltipla​

Sintaxe​

#!/bin/bash
case $variavel in
pattern1)
comandos1
;;
pattern2)
comandos2
;;
pattern3|pattern4)
comandos3
;;
*)
comandos_padrao
;;
esac

Exemplos​

#!/bin/bash
# Menu simples
read -p "Escolha (1-3): " escolha

case $escolha in
1)
echo "Opção 1 selecionada"
;;
2)
echo "Opção 2 selecionada"
;;
3)
echo "Opção 3 selecionada"
;;
*)
echo "Escolha inválida"
exit 1
;;
esac

# Patterns com wildcards
case "$1" in
start)
echo "Inicializando"
;;
stop)
echo "Parando"
;;
restart|reload)
echo "Reiniciando"
;;
*)
echo "Uso: $0 {start|stop|restart}"
exit 1
;;
esac

Controle de Fluxo​

break e continue​

#!/bin/bash
# break: Sair do loop
for i in {1..10}; do
if [ $i -eq 5 ]; then
break
fi
echo $i
done

# continue: Pular para a próxima iteração
for i in {1..10}; do
if [ $i -eq 5 ]; then
continue
fi
echo $i
done

exit​

#!/bin/bash
# exit: Sair do script
if [ ! -f "$1" ]; then
echo "Erro: Arquivo não encontrado"
exit 1
fi

# Código de retorno
exit 0 # Sucesso
exit 1 # Erro geral
exit 2 # Erro específico

Exemplo Completo​

#!/bin/bash
# Script de processamento de arquivos

# Verificar argumentos
if [ $# -eq 0 ]; then
echo "Uso: $0 ARQUIVO..."
exit 1
fi

# Processar cada arquivo
for arquivo in "$@"; do
# Verificar existência
if [ ! -f "$arquivo" ]; then
echo "Aviso: $arquivo não existe, ignorado"
continue
fi

# Verificar permissões
if [ ! -r "$arquivo" ]; then
echo "Erro: $arquivo não é legível"
continue
fi

# Processar conforme extensão
case "$arquivo" in
*.txt)
echo "Processando texto: $arquivo"
# Processamento...
;;
*.log)
echo "Processando log: $arquivo"
# Processamento...
;;
*)
echo "Tipo não suportado: $arquivo"
;;
esac
done

echo "Processamento concluído"

Resumo​

Neste capítulo, você aprendeu:

if/else: Condições com operadores de teste
for: Loops com listas, sequências, arrays
while: Loops condicionais, leitura de arquivos
case: Seleção múltipla com patterns
Controle: break, continue, exit
Operadores: Arquivos, strings, números, lógica


Próximos Passos​

Capítulo 6.4: Funções e Cron
Módulo 7: Rede e Configuração


Capítulo criado em: Dezembro 2024