Cheatsheet Em BashScript

Variáveis

# Declarar variáveis (sem espaços!)
nome="João"
idade=25

# Usar variáveis
echo "Olá, $nome!"
echo "Você tem ${idade} anos"

# Variáveis especiais
$0  # Nome do script
$1, $2  # Argumentos do script
$#  # Número de argumentos
$?  # Código de retorno

Arrays

# Criar array
frutas=("maçã" "banana" "laranja")

# Acessar elementos
echo "${frutas[0]}"  # Primeiro elemento
echo "${frutas[@]}"  # Todos elementos
echo "${#frutas[@]}"  # Tamanho do array

# Adicionar elemento
frutas+=("uva")

Input e Output

# Ler input do usuário
echo "Digite seu nome:"
read nome

# Redirecionar output
echo "Log" > arquivo.txt  # Sobrescrever
echo "Mais log" >> arquivo.txt  # Anexar

# Pipe - conectar comandos
ls | grep ".txt"

String Operations

# Manipulação de strings
texto="Olá Mundo"

# Comprimento
echo ${#texto}

# Substring
echo ${texto:0:3}  # Primeiros 3 caracteres

# Substituição
echo ${texto/Mundo/Terra}

Operadores e Testes

# Operadores numéricos
[ $a -eq $b ]  # Igual
[ $a -ne $b ]  # Diferente
[ $a -gt $b ]  # Maior que
[ $a -lt $b ]  # Menor que

# Operadores de string
[ -z "$string" ]  # Vazia
[ -n "$string" ]  # Não vazia
[ "$a" = "$b" ]  # Strings iguais

# Operadores de arquivo
[ -f "$arquivo" ]  # Existe e é arquivo
[ -d "$dir" ]  # Existe e é diretório
[ -x "$arquivo" ]  # Tem permissão de execução

Funções

# Declarar função
saudacao() {
    echo "Olá, $1!"
}

# Chamar função
saudacao "Maria"

# Função com retorno
soma() {
    return $(($1 + $2))
}

soma 5 3
echo $?  # Mostra 8

Argumentos do Script

# Acessar argumentos
$1, $2  # Primeiro, segundo argumento
$@  # Todos os argumentos
$#  # Número de argumentos

# Verificar argumentos
if [ $# -lt 2 ]; then
    echo "Uso: $0 arg1 arg2"
    exit 1
fi

# Processar argumentos
while getopts "hf:v" opt; do
    case $opt in
        h) mostrar_ajuda ;;
        f) arquivo="$OPTARG" ;;
        v) verbose=1 ;;
    esac
done

Cores e Formatação

# Cores ANSI
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'  # Sem cor

# Usar cores
echo -e "${RED}Erro!${NC}"
echo -e "${GREEN}Sucesso!${NC}"

# Formatação
BOLD='\033[1m'
UNDERLINE='\033[4m'
BLINK='\033[5m'

Debugging

# Ativar modo debug
set -x  # Mostra comandos executados
set -e  # Para se houver erro

# Debug em parte específica
{
    set -x
    # código para debugar
    set +x
}

# Ver variáveis definidas
set | less

Boas Práticas

# Shebang no início do script
#!/bin/bash

# Definir variáveis em maiúsculo
NOME_ARQUIVO="config.txt"

# Usar {} para variáveis
echo "${NOME_ARQUIVO}_backup"

# Verificar retorno de comandos
if ! comando; then
    echo "Erro ao executar comando"
    exit 1
fi

Pipes e Redirecionamento

# Redirecionar saída
comando > arquivo.txt  # Sobrescrever
comando >> arquivo.txt  # Anexar

# Redirecionar erro
comando 2> erro.log
comando > saida.txt 2> erro.log

# Pipes múltiplos
cat arquivo.txt | grep "erro" | wc -l

Estruturas de Controle

# If/Else
if [ $idade -gt 18 ]; then
    echo "Maior de idade"
elif [ $idade -eq 18 ]; then
    echo "Acabou de fazer 18"
else
    echo "Menor de idade"
fi

# Case (switch)
case $opcao in
    start)
        iniciar_app
        ;;
    stop)
        parar_app
        ;;
    *)
        echo "Opção inválida"
        ;;
esac

Loops Avançados

# Loop com break/continue
for i in {1..10}; do
    [ $i -eq 5 ] && continue  # Pula 5
    [ $i -eq 8 ] && break     # Para no 8
    echo $i
done

# Loop em arquivos
while read linha; do
    echo "Processando: $linha"
done < arquivo.txt

# Loop com incremento personalizado
for ((i=0; i<=10; i+=2)); do
    echo "Número par: $i"
done

Expressões Aritméticas

# Operações matemáticas
resultado=$((5 + 3))
resultado=$((10 * 2))
resultado=$((20 / 4))

# Incremento/Decremento
contador=0
((contador++))
((contador+=2))

# Expressões complexas
resultado=$(( (5 + 3) * 2 ))
resto=$(( 10 % 3 ))

# Com variáveis
a=5
b=3
soma=$(($a + $b))

Manipulação de Erros

# Tratamento de erros
set -e  # Para script se houver erro
set -u  # Erro se usar variável não definida

# Função para erro
erro() {
    echo -e "${RED}Erro: $1${NC}" >&2
    exit 1
}

# Usar trap para limpar
trap 'rm -f "$TMPFILE"' EXIT

# Verificar comando anterior
if [ $? -ne 0 ]; then
    erro "Comando falhou"
fi

Menu Interativo

# Menu simples
while true; do
    echo -e "\n1. Opção 1"
    echo "2. Opção 2"
    echo "3. Sair"
    
    read -p "Escolha uma opção: " opcao
    
    case $opcao in
        1) opcao_1 ;;
        2) opcao_2 ;;
        3) break ;;
        *) echo "Opção inválida" ;;
    esac
done

Funções Avançadas

# Função com variáveis locais
calcular() {
    local x=$1
    local y=$2
    local resultado
    resultado=$(($x * $y))
    echo $resultado
}

# Função com múltiplos retornos
get_info() {
    echo "nome=João"
    echo "idade=25"
}

# Capturar múltiplos retornos
eval $(get_info)

Validações

# Validar número
is_numero() {
    [[ $1 =~ ^[0-9]+$ ]]
}

# Validar email
is_email() {
    [[ $1 =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ ]]
}

# Validar IP
is_ip() {
    [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]
}

Oneliners Úteis

# Executar comando para cada arquivo
for f in *.txt; do echo "Processando $f"; done

# Substituir texto em múltiplos arquivos
find . -type f -name "*.txt" -exec sed -i 's/velho/novo/g' {} \;

# Backup rápido com data
tar -czf backup-$(date +%Y%m%d).tar.gz /caminho/pasta/

# Monitorar log em tempo real com filtro
tail -f log.txt | grep --line-buffered "erro"

# Executar comando a cada 5 segundos
while true; do comando; sleep 5; done

# Processar CSV em uma linha
while IFS=',' read -r col1 col2; do echo "$col1 -> $col2"; done < arquivo.csv

# Renomear múltiplos arquivos
for f in *.txt; do mv "$f" "novo_${f}"; done

# Extrair números de um texto
grep -o '[0-9]\+' arquivo.txt

# Contar ocorrências únicas
sort arquivo.txt | uniq -c | sort -nr

# Executar em paralelo
echo "comando1 & comando2 & comando3" | bash

Oneliners Avançados

# Encontrar arquivos duplicados
find . -type f -exec md5sum {} \; | sort | uniq -w32 -dD

# Monitorar uso de memória
while true; do ps aux | sort -nk 4 | tail -n 5; sleep 1; clear; done

# Backup incremental
rsync -av --delete source/ dest/ > backup-$(date +%F).log

# Converter JSON para CSV
jq -r '.[] | [.campo1,.campo2] | @csv' arquivo.json

# Servidor HTTP simples
while true; do nc -l 8080 < index.html; done