Shell Scripting Avançado
Aula 1 de 7
Arrays e Manipulação de Strings
#!/bin/bash
# Arrays
FRUTAS=("maçã" "banana" "laranja")
echo "${FRUTAS[0]}" # maçã
echo "${FRUTAS[@]}" # todos
echo "${#FRUTAS[@]}" # tamanho do array
echo "${!FRUTAS[@]}" # índices
# Manipulação de strings
TEXTO="Linux é poderoso"
echo "${TEXTO/Linux/Unix}" # substitui primeira ocorrência
echo "${TEXTO//o/0}" # substitui todas
echo "${TEXTO:0:5}" # substring (5 primeiros)
echo "${TEXTO##* }" # remove prefixo mais longo (última palavra)
I/O Redirection Avançado
# Descritores de arquivo
comando > arquivo.log 2>&1 # stdout + stderr
comando &> arquivo.log # igual (bash 4+)
comando 2> erro.log 1> saida.log # separados
# Here Document
cat << EOF > config.txt
hostname=$(hostname)
data=$(date)
EOF
# Here String
grep "erro" <<< "$log_mensagem"
# Process Substitution
diff <(ls dir1) <(ls dir2)
Traps e Signals
#!/bin/bash
cleanup() {
echo "Limpando recursos..."
rm -f /tmp/arquivo_temporario
exit
}
trap cleanup EXIT # executa na saída
trap '' SIGINT # ignora Ctrl+C
trap 'echo "Ctrl+C ignorado"' SIGINT
trap - SIGINT # restaura comportamento padrão
# Exemplo prático
trap 'echo "ERRO na linha $LINENO"; exit 1' ERR
Expressões Regulares
#!/bin/bash
# grep com regex
grep -E "^[0-9]{3}-[0-9]{4}" arquivo.txt
grep -P "^\d{3}-\d{4}" arquivo.txt # Perl regex (GNU grep)
# sed — stream editor
sed 's/erro/ERRO/g' arquivo.txt # substituir
sed -i.bak 's/antigo/novo/g' arquivo # in-place com backup
sed '/^#/d' config.txt # deletar linhas comentadas
sed -n '10,20p' arquivo.txt # imprimir linhas 10-20
# awk — processamento de colunas
awk '{print $1, $3}' arquivo.txt # colunas 1 e 3
awk '/erro/ {print NR, $0}' log.txt # linhas com "erro" + número
awk -F: '{print $1}' /etc/passwd # separador :
Parallelismo em Bash
#!/bin/bash
# Executar em paralelo usando &
processar() {
sleep $1
echo "Processo $1 concluído"
}
processar 5 &
processar 3 &
processar 1 &
wait # aguarda todos
echo "Todos concluídos"
# GNU Parallel (se instalado)
parallel echo "Processando {}" ::: {1..10}
Shell scripting avançado transforma administração manual em automação confiável. Invista em sed, awk e traps.