0%
Scripting e Automação no Linux

Scripting e Automação no Linux

Domine scripts Bash e a automação de tarefas para otimizar seu trabalho no Linux

I

InSkillCoach

· min

Scripting e Automação no Linux

A automação de tarefas repetitivas é uma das grandes vantagens do Linux. Com o scripting Bash e diversas ferramentas de automação, você pode economizar muito tempo e reduzir erros humanos. Este guia apresenta os fundamentos do scripting Bash e as técnicas essenciais de automação no Linux.

Fundamentos do scripting Bash

Estrutura de um script Bash

Todo script Bash começa com um “shebang”, que indica o interpretador a ser usado.

#!/bin/bash

# Isto é um comentário
echo "Bonjour, monde!"

# Variáveis
NOM="Utilisateur"
echo "Bonjour, $NOM"

# Saída com código de retorno 0 (sucesso)
exit 0

Para tornar um script executável:

chmod +x mon_script.sh

Para executar um script:

./mon_script.sh

Variáveis e operações

#!/bin/bash

# Declaração e uso de variáveis
NOMBRE=10
TEXTE="Linux"

# Operações aritméticas
let RESULTAT=$NOMBRE+5
echo "Résultat: $RESULTAT"

# Outro método para cálculos
CARRE=$((NOMBRE * NOMBRE))
echo "Le carré de $NOMBRE est $CARRE"

# Variáveis de ambiente
echo "Votre répertoire personnel: $HOME"
echo "Votre shell actuel: $SHELL"

Entradas e saídas

#!/bin/bash

# Pedir uma entrada ao usuário
echo "Entrez votre nom:"
read NOM

# Exibir uma mensagem com a entrada
echo "Bonjour, $NOM!"

# Redirecionamento de saída para um arquivo
echo "Log: Script exécuté par $NOM" >> log.txt

# Ler a partir de um arquivo
echo "Contenu du fichier log.txt:"
cat log.txt

Argumentos de linha de comando

#!/bin/bash

# $0 é o nome do script
# $1, $2, etc. são os argumentos
# $# é o número de argumentos
# $@ representa todos os argumentos

echo "Nom du script: $0"
echo "Premier argument: $1"
echo "Deuxième argument: $2"
echo "Nombre d'arguments: $#"
echo "Tous les arguments: $@"

Estruturas de controle

Condições

#!/bin/bash

# Estrutura condicional if-else
NOMBRE=15

if [ $NOMBRE -gt 10 ]; then
    echo "$NOMBRE est supérieur à 10"
elif [ $NOMBRE -eq 10 ]; then
    echo "$NOMBRE est égal à 10"
else
    echo "$NOMBRE est inférieur à 10"
fi

# Operadores de comparação para números
# -eq : igual
# -ne : diferente
# -gt : maior que
# -lt : menor que
# -ge : maior ou igual
# -le : menor ou igual

# Testes em arquivos
if [ -f "/etc/passwd" ]; then
    echo "Le fichier /etc/passwd existe"
fi

# Operadores para arquivos
# -f : arquivo regular
# -d : diretório
# -e : existe
# -r : legível
# -w : gravável
# -x : executável

Laços

#!/bin/bash

# Laço for
echo "Comptage avec for:"
for i in {1..5}; do
    echo "Numéro $i"
done

# Laço for com lista
echo "Liste de fruits:"
for fruit in pomme orange banane; do
    echo "J'aime les $fruit"
done

# Laço while
echo "Comptage avec while:"
COUNT=1
while [ $COUNT -le 5 ]; do
    echo "Compteur: $COUNT"
    let COUNT=COUNT+1
done

# Laço until (até que a condição seja verdadeira)
echo "Comptage avec until:"
COUNT=5
until [ $COUNT -le 0 ]; do
    echo "Décompte: $COUNT"
    let COUNT=COUNT-1
done

Case (switch)

#!/bin/bash

echo "Entrez un fruit (pomme, orange, banane):"
read FRUIT

case $FRUIT in
    "pomme")
        echo "Les pommes sont rouges ou vertes."
        ;;
    "orange")
        echo "Les oranges sont... orange!"
        ;;
    "banane")
        echo "Les bananes sont jaunes."
        ;;
    *)
        echo "Je ne connais pas ce fruit."
        ;;
esac

Funções

#!/bin/bash

# Definição de uma função
saluer() {
    echo "Bonjour, $1!"
}

# Função com retorno de valor
calculer_carre() {
    local nombre=$1
    echo $((nombre * nombre))
}

# Chamada de função
saluer "Alice"
saluer "Bob"

# Capturar o valor de retorno
resultat=$(calculer_carre 5)
echo "Le carré de 5 est $resultat"

Scripts de automação práticos

Script de backup automático

#!/bin/bash

# Script de sauvegarde automatique
# Usage: ./backup.sh [répertoire_source]

# Verificar se um argumento foi fornecido
if [ $# -eq 0 ]; then
    echo "Usage: $0 [répertoire_source]"
    exit 1
fi

# Variáveis
SOURCE_DIR=$1
BACKUP_DIR="/home/user/backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
ARCHIVE_NAME="backup_$DATE.tar.gz"

# Criar o diretório de backup se ele não existir
mkdir -p $BACKUP_DIR

# Criar o arquivo compactado
echo "Création de la sauvegarde de $SOURCE_DIR..."
tar -czf "$BACKUP_DIR/$ARCHIVE_NAME" "$SOURCE_DIR"

# Verificar se o backup foi bem-sucedido
if [ $? -eq 0 ]; then
    echo "Sauvegarde réussie: $BACKUP_DIR/$ARCHIVE_NAME"
    echo "Taille: $(du -h "$BACKUP_DIR/$ARCHIVE_NAME" | cut -f1)"
else
    echo "Erreur lors de la sauvegarde"
    exit 1
fi

# Remover backups antigos (mais de 30 dias)
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +30 -delete

Monitoramento de sistema automatizado

#!/bin/bash

# Script de surveillance système
# Vérifie l'utilisation du CPU, de la mémoire et de l'espace disque

# Limites de alerta
CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=90
LOG_FILE="/var/log/system_monitor.log"

# Função de registro de logs
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

# Verificação do uso de CPU
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}' | cut -d. -f1)
if [ $CPU_USAGE -gt $CPU_THRESHOLD ]; then
    MESSAGE="ALERTE: Utilisation CPU à $CPU_USAGE% (seuil: $CPU_THRESHOLD%)"
    log_message "$MESSAGE"
    echo "$MESSAGE"
fi

# Verificação do uso de memória
MEM_USAGE=$(free | grep Mem | awk '{print int($3/$2 * 100)}')
if [ $MEM_USAGE -gt $MEM_THRESHOLD ]; then
    MESSAGE="ALERTE: Utilisation mémoire à $MEM_USAGE% (seuil: $MEM_THRESHOLD%)"
    log_message "$MESSAGE"
    echo "$MESSAGE"
fi

# Verificação do espaço em disco
DISK_USAGE=$(df -h / | grep / | awk '{print $5}' | cut -d% -f1)
if [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then
    MESSAGE="ALERTE: Utilisation disque à $DISK_USAGE% (seuil: $DISK_THRESHOLD%)"
    log_message "$MESSAGE"
    echo "$MESSAGE"
fi

Script de deploy

#!/bin/bash

# Script de déploiement simple
# Usage: ./deploy.sh [environnement]

# Configuração
APP_NAME="mon-application"
GIT_REPO="https://github.com/user/repo.git"
DEPLOY_DIR="/var/www"

# Verificar o ambiente
if [ $# -eq 0 ]; then
    ENV="development"
else
    ENV=$1
fi

echo "Déploiement de $APP_NAME en environnement $ENV"

# Criar um diretório temporário
TEMP_DIR=$(mktemp -d)
echo "Répertoire temporaire: $TEMP_DIR"

# Clonar o repositório
echo "Clonage du dépôt..."
git clone $GIT_REPO $TEMP_DIR
if [ $? -ne 0 ]; then
    echo "Erreur lors du clonage du dépôt"
    exit 1
fi

# Ir para o diretório do projeto
cd $TEMP_DIR

# Checkout da branch apropriada
if [ "$ENV" = "production" ]; then
    git checkout master
else
    git checkout develop
fi

# Instalação das dependências
echo "Installation des dépendances..."
npm install --production

# Build do projeto
echo "Construction du projet..."
npm run build

# Deploy
echo "Déploiement vers $DEPLOY_DIR/$APP_NAME-$ENV..."
mkdir -p $DEPLOY_DIR/$APP_NAME-$ENV
cp -r dist/* $DEPLOY_DIR/$APP_NAME-$ENV/

# Limpeza
echo "Nettoyage..."
rm -rf $TEMP_DIR

echo "Déploiement terminé avec succès!"

Automação com Cron

O Cron é um agendador de tarefas que permite executar scripts em momentos específicos.

Sintaxe do crontab

# Format crontab:
# .---------------- minute (0 - 59)
# |  .------------- heure (0 - 23)
# |  |  .---------- jour du mois (1 - 31)
# |  |  |  .------- mois (1 - 12)
# |  |  |  |  .---- jour de la semaine (0 - 6) (Dimanche=0)
# |  |  |  |  |
# *  *  *  *  * commande à exécuter

Exemplos de tarefas cron

# Editar seu crontab
crontab -e

Exemplos de tarefas:

# Exécuter un script tous les jours à 3h du matin
0 3 * * * /chemin/vers/script.sh

# Exécuter une sauvegarde tous les lundis à 2h30
30 2 * * 1 /chemin/vers/backup.sh

# Exécuter un script toutes les 15 minutes
*/15 * * * * /chemin/vers/script.sh

# Exécuter un script le premier jour de chaque mois
0 0 1 * * /chemin/vers/script.sh

Gerenciamento das saídas do cron

# Rediriger la sortie standard et d'erreur vers un fichier
0 3 * * * /chemin/vers/script.sh > /var/log/script.log 2>&1

# Ajouter la sortie à un fichier existant
0 3 * * * /chemin/vers/script.sh >> /var/log/script.log 2>&1

# Ignorer toute sortie
0 3 * * * /chemin/vers/script.sh > /dev/null 2>&1

# Envoyer la sortie par email (si configuré)
0 3 * * * /chemin/vers/script.sh | mail -s "Résultat du script" user@example.com

Automação avançada

Automação com Ansible

O Ansible é uma poderosa ferramenta de automação para gerenciamento de configuração e deploy de aplicações.

# Instalar o Ansible
sudo apt install ansible

# Exemplo de comando ad-hoc
ansible all -i inventory.ini -m ping

# Executar um playbook
ansible-playbook -i inventory.ini playbook.yml

Automação com Systemd

O Systemd permite criar serviços personalizados que são executados em segundo plano.

Exemplo de arquivo de serviço (/etc/systemd/system/mon-service.service):

[Unit]
Description=Mon Service Personnalisé
After=network.target

[Service]
Type=simple
User=utilisateur
WorkingDirectory=/chemin/vers/app
ExecStart=/usr/bin/node app.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

Comandos para gerenciar o serviço:

# Recarregar o systemd após criar/modificar um serviço
sudo systemctl daemon-reload

# Habilitar o serviço na inicialização
sudo systemctl enable mon-service

# Iniciar o serviço
sudo systemctl start mon-service

# Verificar o status
sudo systemctl status mon-service

Conclusão

O scripting Bash e a automação são competências essenciais para qualquer administrador de sistemas Linux ou desenvolvedor. Ao automatizar tarefas repetitivas, você não só economiza tempo, como também reduz erros humanos e melhora a consistência das suas operações.

Comece com scripts simples e avance para soluções de automação mais complexas à medida que ganhar confiança. Não se esqueça de documentar seus scripts e de testá-los com cuidado antes de colocá-los em produção.

Com a prática, você descobrirá que quase todas as tarefas repetitivas no Linux podem ser automatizadas, permitindo que você se concentre em trabalhos mais criativos e estratégicos.

InSkillCoach

Sobre InSkillCoach

Especialista em treinamento e tecnologias

Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.

Certificações:

  • AWS Certified Solutions Architect – Professional
  • Certificações Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
627
267

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!