Learn Bash Help

Melhores Práticas

Princípios Fundamentais

1. Segurança

# ✅ Correto: Validar entradas input="${1:-}" if [[ ! "$input" =~ ^[0-9]+$ ]]; then echo "Erro: Digite apenas números" exit 1 fi # ❌ Incorreto: Entrada sem validação rm -rf "$1"

2. Legibilidade

# ✅ Correto: Código legível e documentado get_user_age() { local name="$1" local birth_year="$2" local current_year=$(date +%Y) echo $((current_year - birth_year)) } # ❌ Incorreto: Código confuso a() { echo $(($(date +%Y)-$2)); }

3. Manutenibilidade

# ✅ Correto: Configurações centralizadas readonly CONFIG_FILE="/etc/app/config.conf" readonly LOG_DIR="/var/log/app" readonly MAX_RETRIES=3 # ❌ Incorreto: Valores hardcoded if [ $count -gt 3 ]; then echo "error" > /var/log/app/temp.log fi

Estrutura de Scripts

1. Cabeçalho Padrão

#!/bin/bash # # Nome: script.sh # Descrição: Breve descrição do script # Autor: Seu Nome # Data: YYYY-MM-DD # Versão: 1.0 # # Uso: ./script.sh [opções]

2. Organização do Código

# Configurações set -euo pipefail IFS=$'\n\t' # Variáveis globais readonly VERSION="1.0.0" readonly CONFIG_FILE="/etc/app/config.conf" # Funções function log_error() { local message="$1" echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') - $message" >&2 } # Código principal function main() { # Lógica principal aqui } # Execução main "$@"

Padrões de Codificação

1. Nomenclatura

# ✅ Correto: Nomes descritivos function validate_user_input() { local user_name="$1" local user_age="$2" } # ❌ Incorreto: Nomes obscuros function val() { local n="$1" local a="$2" }

2. Indentação e Formatação

# ✅ Correto: Indentação consistente if [ "$condition" = true ]; then for item in "${items[@]}"; do process_item "$item" done fi # ❌ Incorreto: Indentação inconsistente if [ "$condition" = true ]; then for item in "${items[@]}" do process_item "$item" done fi

Tratamento de Erros

1. Validação de Entrada

# ✅ Correto: Validação completa function process_file() { local file="$1" if [ -z "$file" ]; then log_error "Nome do arquivo não fornecido" return 1 fi if [ ! -f "$file" ]; then log_error "Arquivo não existe: $file" return 1 fi if [ ! -r "$file" ]; then log_error "Arquivo sem permissão de leitura: $file" return 1 fi }

2. Tratamento de Exceções

# ✅ Correto: Tratamento de erros set -e trap 'echo "Erro na linha $LINENO"' ERR function cleanup() { # Limpeza de recursos rm -f "$TEMP_FILE" } trap cleanup EXIT

Otimização e Performance

1. Uso de Recursos

# ✅ Correto: Uso eficiente while IFS= read -r line; do process_line "$line" done < "$file" # ❌ Incorreto: Desperdício de recursos cat "$file" | while read line; do process_line "$line" done

2. Operações em Lote

# ✅ Correto: Operações em lote find . -type f -name "*.log" -exec rm {} + # ❌ Incorreto: Operações individuais for file in *.log; do rm "$file" done

Segurança Avançada

1. Permissões

# ✅ Correto: Gestão de permissões umask 077 touch "$SENSITIVE_FILE" chmod 600 "$SENSITIVE_FILE" # ❌ Incorreto: Permissões inseguras touch "$SENSITIVE_FILE" chmod 777 "$SENSITIVE_FILE"

2. Dados Sensíveis

# ✅ Correto: Proteção de dados sensíveis read -s -p "Password: " password echo # ❌ Incorreto: Exposição de dados echo "Password: $password"

Documentação

1. Comentários

# ✅ Correto: Comentários úteis # Valida o formato do CPF (XXX.XXX.XXX-XX) function validate_cpf() {
14 abril 2025