Skip to main content

Básico

#!/bin/bash

# Comentário
echo "Hello World"

# Variáveis
name="World"
echo "Hello $name"

# Input
echo "Digite seu nome:"
read username
echo "Olá, $username"

# Arrays
frutas=("maçã" "banana" "laranja")
echo ${frutas[0]}  # maçã
echo ${frutas[@]}  # Todos
echo ${#frutas[@]} # Tamanho

Condicionais

# If
if [ $age -ge 18 ]; then
    echo "Maior de idade"
fi

# If-else
if [ $status == "OK" ]; then
    echo "Sucesso"
else
    echo "Falha"
fi

# If-elif
if [ $score -ge 90 ]; then
    echo "A"
elif [ $score -ge 80 ]; then
    echo "B"
else
    echo "C"
fi

# Operadores
# -eq  (igual)
# -ne  (diferente)
# -gt  (maior)
# -lt  (menor)
# -ge  (maior ou igual)
# -le  (menor ou igual)
# -z   (string vazia)
# -n   (string não vazia)
# -f   (arquivo existe)
# -d   (diretório existe)

Loops

# For
for i in {1..5}; do
    echo "Número: $i"
done

# For com lista
for file in *.txt; do
    echo "Processando: $file"
done

# For com C-style
for ((i=0; i<10; i++)); do
    echo $i
done

# While
count=1
while [ $count -le 5 ]; do
    echo $count
    ((count++))
done

# Until
until [ $count -gt 10 ]; do
    echo $count
    ((count++))
done

Funções

greet() {
    echo "Olá, $1!"
}

greet "Mundo"

# Com retorno
add() {
    result=$(($1 + $2))
    echo $result
}

sum=$(add 5 3)
echo $sum  # 8

Arrays

# Criar array
arr=(one two three)

# Acessar elementos
echo ${arr[0]}  # one
echo ${arr[@]}  # Todos
echo ${#arr[@]} # Tamanho

# Adicionar elementos
arr+=("four")

# Loop
for item in "${arr[@]}"; do
    echo $item
done

# Associative array (Bash 4+)
declare -A capitals
capitals[BR]="Brasília"
capitals[US]="Washington"
echo ${capitals[BR]}

Strings

str="Hello World"

# Tamanho
echo ${#str}

# Substring
echo ${str:6}      # World
echo ${str:0:5}    # Hello

# Replace
echo ${str/World/Bash}  # Hello Bash
echo ${str//o/O}        # HellO WOrld

# Lower/Upper
echo ${str,,}   # hello world
echo ${str^^}   # HELLO WORLD

Arquivos

# Ler arquivo linha por linha
while IFS= read -r line; do
    echo "$line"
done < "file.txt"

# Redirecionar output
command > output.txt 2>&1

# Testar arquivo
if [ -f "file.txt" ]; then
    echo "Arquivo existe"
fi

# Testar
# -e  (existe)
# -f  (arquivo regular)
# -d  (diretório)
# -r  (legível)
# -w  (gravável)
# -x  (executável)

Case

case $variable in
    start)
        echo "Iniciando..."
        ;;
    stop)
        echo "Parando..."
        ;;
    restart)
        echo "Reiniciando..."
        ;;
    *)
        echo "Comando desconhecido"
        ;;
esac

Math

# Aritmética
echo $((2 + 3))    # 5
echo $((10 - 3))   # 7
echo $((4 * 2))    # 8
echo $((10 / 3))   # 3
echo $((10 % 3))   # 1

# Operações com decimais
echo "scale=2; 10/3" | bc

Exemplo Prático

#!/bin/bash

# Script de backup
set -euo pipefail

BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
SOURCE_DIR="/data"
RETENTION_DAYS=7

echo "Iniciando backup..."

# Criar diretório de backup
mkdir -p "$BACKUP_DIR"

# Compactar arquivos
tar -czvf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"

# Listar backups
echo "Backups existentes:"
ls -lh "$BACKUP_DIR"

# Remover backups antigos
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete

echo "Backup concluído com sucesso!"

Debug

# Modos de debug
set -x  # Print commands
set -v  # Print input
set -e  # Exit on error
set -u  # Exit on unset variable
set -o pipefail

# Ou na primeira linha
#!/bin/bash -x