Shell Script: Automação e Eficiência no Linux

shell-script-logo

Shell script é uma poderosa ferramenta utilizada para automatizar tarefas no ambiente Unix/Linux.

Por meio de scripts, é possível concatenar comandos, criar rotinas de manutenção, manipular arquivos e até mesmo interagir com outros sistemas.

Neste artigo, exploraremos o que é um shell script, suas vantagens e desvantagens, e apresentaremos exemplos práticos para você começar a utilizar essa ferramenta indispensável.

O que é Shell Script?

Shell script é um programa de computador projetado para ser executado pelo shell, que é o interpretador de comandos nos sistemas operacionais Unix e Linux.

Os scripts de shell são escritos em linguagens de script que são interpretadas em vez de compiladas, permitindo a automação de tarefas repetitivas e a execução de comandos complexos com facilidade.

Vantagens do Shell Script

  • Automação de Tarefas: Facilita a automação de tarefas repetitivas, economizando tempo e reduzindo a possibilidade de erros manuais.
  • Flexibilidade: Pode ser usado para uma ampla variedade de tarefas, desde a manipulação de arquivos até a administração de sistemas.
  • Integração com o Sistema: Acesso direto aos comandos do sistema operacional e ferramentas de linha de comando.
  • Rapidez na Criação: Scripts podem ser escritos e modificados rapidamente, sem a necessidade de compilação.
  • Portabilidade: Scripts podem ser facilmente portados para diferentes sistemas Unix/Linux com poucas ou nenhuma modificação.
  • Facilidade de Aprendizado: A sintaxe é simples e intuitiva, especialmente para usuários familiarizados com a linha de comando do Unix/Linux.

Desvantagens do Shell Script

  • Desempenho: Pode ser mais lento que programas compilados, especialmente para tarefas intensivas em processamento.
  • Complexidade: Scripts grandes e complexos podem ser difíceis de manter e depurar.
  • Segurança: Se mal escritos, scripts podem introduzir vulnerabilidades de segurança.
  • Portabilidade: Embora geralmente portáveis, scripts podem ter problemas em diferentes versões de shells ou sistemas operacionais.
  • Depuração Limitada: Ferramentas de depuração para shell script são menos avançadas em comparação com linguagens de programação tradicionais.

Exemplos de Código

Exemplo 1: Script Básico de Backup

#!/bin/bash

# Definir o diretório de origem e destino
ORIGEM="/home/usuario/documentos"
DESTINO="/home/usuario/backup"

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

# Copiar arquivos da origem para o destino
cp -r "$ORIGEM"/* "$DESTINO"

echo "Backup concluído com sucesso!"

Exemplo 2: Monitoramento de Uso de Disco

#!/bin/bash

# Definir o limite de uso de disco (em porcentagem)
LIMITE=80

# Obter o uso atual do disco
USO_ATUAL=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')

# Verificar se o uso atual excede o limite
if [ "$USO_ATUAL" -gt "$LIMITE" ]; then
    echo "Alerta: Uso de disco excedeu $LIMITE%. Uso atual: $USO_ATUAL%."
else
    echo "Uso de disco está dentro do limite. Uso atual: $USO_ATUAL%."
fi

Exemplo 3: Renomear Múltiplos Arquivos

#!/bin/bash

# Adicionar prefixo "novo_" a todos os arquivos .txt no diretório atual
for arquivo in *.txt; do
    mv "$arquivo" "novo_$arquivo"
done

echo "Arquivos renomeados com sucesso!"

Boas Práticas na Escrita de Shell Scripts

Para garantir que seus scripts sejam eficientes, seguros e fáceis de manter, é importante seguir algumas boas práticas:

  1. Comentários: Adicione comentários para explicar o que cada parte do script faz. Isso ajuda outros desenvolvedores (e você mesmo, no futuro) a entenderem o código.
   # Este script faz backup dos documentos do usuário
  1. Validação de Entrada: Sempre valide as entradas dos usuários para evitar problemas de segurança e erros inesperados.
   if [ -z "$1" ]; then
       echo "Uso: $0 <diretório>"
       exit 1
   fi
  1. Tratamento de Erros: Implemente tratamento de erros para que o script lide adequadamente com situações inesperadas.
   if ! cp -r "$ORIGEM"/* "$DESTINO"; then
       echo "Erro ao copiar arquivos."
       exit 1
   fi
  1. Modularidade: Divida o script em funções para organizar melhor o código e facilitar a reutilização.
   backup() {
       cp -r "$1"/* "$2"
       echo "Backup concluído!"
   }
  1. Uso de Variáveis: Utilize variáveis para evitar repetição de código e facilitar a manutenção.
   ORIGEM="/home/usuario/documentos"
   DESTINO="/home/usuario/backup"

Exemplos Avançados de Shell Script

Exemplo 4: Backup Incremental

Um backup incremental só copia arquivos que foram alterados desde o último backup, economizando tempo e espaço em disco.

#!/bin/bash

ORIGEM="/home/usuario/documentos"
DESTINO="/home/usuario/backup"
LOG="/home/usuario/backup/backup.log"
ULTIMO_BACKUP=$(date +%F -r "$LOG")

# Criar log de backup se não existir
touch "$LOG"

# Executar backup incremental
rsync -av --update --log-file="$LOG" --exclude-from="$DESTINO/exclude.txt" "$ORIGEM/" "$DESTINO/"

# Atualizar log de backup
date +%F > "$LOG"

echo "Backup incremental concluído!"

Exemplo 5: Monitoramento de Sistema

Monitorar recursos do sistema, como uso de CPU, memória e disco, e enviar alertas por e-mail quando os limites forem excedidos.

#!/bin/bash

LIMITE_CPU=75
LIMITE_MEMORIA=80
EMAIL="[email protected]"

USO_CPU=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
USO_MEMORIA=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

if (( $(echo "$USO_CPU > $LIMITE_CPU" | bc -l) )); then
    echo "Alerta: Uso de CPU está em $USO_CPU%" | mail -s "Alerta de CPU" $EMAIL
fi

if (( $(echo "$USO_MEMORIA > $LIMITE_MEMORIA" | bc -l) )); then
    echo "Alerta: Uso de memória está em $USO_MEMORIA%" | mail -s "Alerta de Memória" $EMAIL
fi

echo "Monitoramento concluído!"

Ferramentas Complementares para Shell Script

Existem várias ferramentas que podem complementar o uso de shell scripts:

  • cron: Utilizado para agendar scripts para execução periódica.
  • awk: Uma linguagem de processamento de texto que pode ser usada dentro de scripts para manipular dados.
  • sed: Um editor de fluxo utilizado para buscar e transformar texto dentro de um fluxo de dados.
  • grep: Utilizado para buscar padrões em arquivos ou fluxos de dados.
  • vim/nano: Editores de texto que facilitam a escrita e edição de scripts.

Conclusão

O shell script é uma ferramenta poderosa e flexível que permite a automação de tarefas no ambiente Unix/Linux, melhorando a eficiência e a produtividade.

Apesar de suas desvantagens, os benefícios superam os contratempos, especialmente quando boas práticas são seguidas.

Com exemplos práticos e uma compreensão clara dos prós e contras, você está pronto para começar a escrever seus próprios scripts e aproveitar ao máximo o potencial do shell script.

Adicione um Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *