⌨️ AUTOMAÇÃO

Bash Scripting

Automação de tarefas de sistema, scripting avançado para administração e criação de ferramentas de produtividade.

← Voltar ao início

Fundamentos

#!/bin/bash
# Shebang - indica qual shell usar

echo "Hello World"
# Imprime texto no ecrã

VARIABLE="valor"
echo $VARIABLE
# Declara e usa variável

Variáveis

  • NÃO usar espaços: var=valor
  • Aceder com $var
  • 只读: readonly var
  • Arrays: arr=(a b c)
  • Parâmetros: $1, $2, $@, $#

Aritmética

  • $((5 + 3)) → 8
  • $((10 / 2)) → 5
  • $((5 * 3)) → 15
  • $((15 % 4)) → 3
  • ((++x)) - incremento

Strings

  • Comprimento: ${#str}
  • Substring: ${str:0:5}
  • Replace: ${str/old/new}
  • Lowercase: ${str,,}
  • Concatenar: "$a$b"

Condicionais & Loops

If/Elif/Else

  • [ $x -eq 5 ] - igual
  • [ $x -ne 5 ] - diferente
  • [ $x -gt 5 ] - maior
  • [ -f file ] - ficheiro existe
  • [ -z "$str" ] - vazio

Case

  • Múltiplos padrões
  • Wildcards suportados
  • Mais eficiente que if/elif
  • Terminar com esac
  • Exemplo: menu de opções

Loops

  • for i in {1..5}
  • while condition
  • until condition
  • break, continue
  • Iterar ficheiros: for f in *

Funções

function ola() {
echo "Olá, $1"
}

ola "Francisco"
# Output: Olá, Francisco

function soma() {
echo $(( $1 + $2 ))
}

resultado=$(soma 5 3)
echo $resultado # Output: 8

Ferramentas & Utilitários

Processamento de Texto

  • sed 's/old/new/g' - replace
  • awk '{print $1}' - colunas
  • grep -r "pattern" - pesquisa
  • cut -d: -f1 - cortar campos
  • sort | uniq - ordenar/unique

Input/Output

  • read var - leitura
  • cat file - mostrar
  • head/tail - linhas
  • wc -l - contar linhas
  • tee file - tee e file

Ficheiros & Sistema

  • test -e - existe?
  • [[ $str == *pattern* ]]
  • basename, dirname
  • mktemp - ficheiro tmp
  • xargs - construir comandos

Exemplos Práticos

# Backup automático
mkdir -p /backup/$(date +%Y%m%d)
tar czf /backup/$(date +%Y%m%d)/dados.tar.gz /dados

# Verificar serviços
for svc in nginx docker ssh; do
if systemctl is-active --quiet $svc; then
echo "$svc: OK"
else
echo "$svc: FALHA"
fi
done

# Limpar logs antigos
find /var/log -name "*.log.*" -mtime +7 -delete