DIA 10: O Artesão de Scripts

LinuxBeginner
Pratique Agora

Introdução

Bem-vindo, aspirante a administrador de sistemas! Você acaba de ingressar em uma empresa de tecnologia em crescimento como Engenheiro DevOps Júnior. Seu colega sênior está em merecidas férias e uma tarefa crítica acaba de cair na sua mesa. O servidor principal da aplicação está gerando inúmeros arquivos de log, e eles estão consumindo rapidamente o espaço em disco. Sua missão, caso aceite, é se tornar O Artesão de Scripts.

Você precisa criar um script shell automatizado para gerenciar esses arquivos de log. Não se trata apenas de executar alguns comandos; trata-se de construir uma ferramenta robusta e reutilizável. Você começará com um script simples e adicionará progressivamente recursos como variáveis, entrada do usuário, verificação de erros e loops. Ao final deste desafio, você terá criado um script capaz de fazer backup e gerenciar arquivos, provando seu valor para a equipe e salvando o dia!

Vamos começar a programar!

Aviso Importante
Os próximos desafios podem exceder o escopo do curso Quick Start with Linux.
Se você encontrar dificuldades durante o desafio:
  1. Pule temporariamente o desafio e continue com os Laboratórios Guiados subsequentes na trilha de aprendizado Linux.
  2. Discuta com o Labby ou visualize a solução.

Escrevendo um Script Shell Simples

Sua primeira tarefa é lançar as bases. Todo grande script começa com uma única linha. Você precisa criar o arquivo do script e adicionar um comando básico para garantir que ele esteja funcionando corretamente. Esta etapa inicial confirma que sua configuração está correta e que você está pronto para construir uma lógica mais complexa.

Tarefas

  • Crie um novo arquivo de script shell chamado log_manager.sh no diretório ~/project.
  • Adicione uma linha "shebang" (#!/bin/bash) no topo do script. Isso informa ao sistema qual interpretador usar.
  • Adicione um comando para imprimir a mensagem "Log Manager Initialized." na tela.
  • Torne o script executável usando o comando chmod +x.

Requisitos

  • O script deve se chamar log_manager.sh.
  • O script deve estar localizado no diretório ~/project.
  • A primeira linha deve ser #!/bin/bash.
  • O script deve usar o comando echo para exibir a mensagem solicitada.
  • O script deve ter permissões de execução (use chmod +x log_manager.sh).

Exemplos

Após criar e tornar o script executável, o processo completo deve ser parecido com este:

Primeiro, verifique se o arquivo do script existe:

ls ~/project/
log_manager.sh

Defina as permissões de execução no script:

chmod +x ~/project/log_manager.sh

Agora execute o script:

./log_manager.sh

O script deve exibir:

Log Manager Initialized.

Você também pode verificar se o conteúdo do script está correto:

cat ~/project/log_manager.sh

O arquivo deve conter:

#!/bin/bash

echo "Log Manager Initialized."

Dicas

  • Você pode usar um editor de texto de linha de comando como o nano para criar e editar o arquivo. Por exemplo: nano log_manager.sh.
  • O comando echo é usado para exibir uma linha de texto.
  • Use chmod +x nome_do_arquivo para tornar um script executável. O +x adiciona permissões de execução para o proprietário do arquivo.

Adicionando Variáveis e Entrada do Usuário

Um script com valores fixos (hardcoded) não é muito flexível. Para tornar seu script mais dinâmico e reutilizável, você agora introduzirá variáveis. Você definirá uma variável para o diretório de logs e solicitará ao usuário um nome para o arquivo de backup. Isso torna o script adaptável a diferentes situações sem a necessidade de alterar o código.

Tarefas

  • Modifique seu script log_manager.sh.
  • Defina uma variável chamada LOG_DIR e atribua a ela o caminho /home/labex/project/app_logs.
  • Adicione uma linha para imprimir "Enter the backup filename: " para solicitar a entrada do usuário.
  • Use o comando read para capturar a entrada do usuário em uma nova variável chamada BACKUP_FILENAME.
  • Adicione um comando echo final para confirmar as configurações, exibindo uma mensagem como "Backing up logs to: [filename]", onde [filename] é o valor inserido pelo usuário.

Requisitos

  • O script deve conter uma variável LOG_DIR configurada como /home/labex/project/app_logs.
  • O script deve usar o comando read para obter entrada do usuário.
  • A entrada do usuário deve ser armazenada em uma variável chamada BACKUP_FILENAME.
  • A saída final deve usar a variável $BACKUP_FILENAME.

Exemplos

Ao executar o script modificado, ele deve solicitar a entrada do usuário e exibir a mensagem de confirmação. Veja como deve ser a interação:

./log_manager.sh
Log Manager Initialized.
Enter the backup filename: my_backup_2024.tar.gz
Backing up logs to: my_backup_2024.tar.gz

O script deve pausar no prompt "Enter the backup filename:", aguardando que o usuário digite um nome de arquivo e pressione Enter. Após o usuário fornecer a entrada, ele exibe a mensagem de confirmação usando o nome de arquivo inserido.

Dicas

  • Para definir uma variável, use a sintaxe NOME_DA_VARIAVEL="valor". Não deve haver espaços ao redor do sinal =.
  • Para usar o valor de uma variável, coloque o prefixo $ antes do seu nome, como $MINHA_VARIAVEL.
  • O comando read pausa o script e espera que o usuário digite algo e pressione Enter.

Implementando Lógica Condicional

Um bom script antecipa problemas. O que acontece se o diretório de logs que você especificou não existir? O script falharia. Para tornar seu script mais robusto, você precisa adicionar lógica condicional. Você usará uma instrução if para verificar se o diretório de logs existe antes de tentar qualquer operação.

Tarefas

  • Modifique seu script log_manager.sh.
  • Adicione uma instrução if para verificar se o diretório especificado pela variável $LOG_DIR existe.
  • Se o diretório existir, o script deve prosseguir como antes (solicitar nome de arquivo, etc.).
  • Se o diretório não existir, o script deve imprimir uma mensagem de erro "Error: Log directory not found." e encerrar imediatamente com um código de status diferente de zero.

Requisitos

  • O script deve usar uma instrução if.
  • A condição deve verificar a existência de um diretório usando o operador de teste -d.
  • Se o diretório não existir, o script deve executar o echo com a mensagem de erro especificada.
  • Se o diretório não existir, o script deve terminar usando exit 1.

Exemplos

Quando o diretório de logs existe, o script deve rodar normalmente:

./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: test_backup.tar.gz
Backing up logs to: test_backup.tar.gz

Se o diretório de logs não existir, o script deve exibir um erro e sair:

./log_manager.sh
Log Manager Initialized.
Error: Log directory not found.

Neste caso, o script termina imediatamente após exibir a mensagem de erro, sem solicitar entrada do usuário ou prosseguir com qualquer operação de backup.

Dicas

  • A sintaxe para uma instrução if básica é if [ condição ]; then ... else ... fi.
  • O teste [ -d "$CAMINHO_DO_DIRETORIO" ] retorna verdadeiro se $CAMINHO_DO_DIRETORIO existir e for um diretório.
  • exit 1 é uma forma padrão de sinalizar que um script terminou com um erro.

Criando Loops para Operações de Arquivo

Agora chegamos ao coração da automação! Você precisa processar os arquivos dentro do diretório de logs. Você usará um loop for para iterar por todos os arquivos que terminam com .log no diretório app_logs. Para este desafio, você simplesmente os copiará para um novo diretório de backup.

Tarefas

  • Primeiro, crie um diretório chamado backups dentro de ~/project onde os arquivos de log serão copiados.
  • Modifique seu script log_manager.sh.
  • Dentro do bloco if (onde a existência do diretório é confirmada), adicione um loop for.
  • O loop deve iterar sobre cada arquivo que termina em .log dentro do diretório $LOG_DIR.
  • Dentro do loop, use o comando cp para copiar cada arquivo de log para o diretório ~/project/backups.
  • Para cada arquivo copiado, imprima uma mensagem como "Copied [filename]".

Requisitos

  • Você deve primeiro criar o diretório ~/project/backups a partir da linha de comando.
  • O script deve usar um loop for.
  • O loop deve iterar pelos arquivos em $LOG_DIR que correspondam ao padrão *.log.
  • O comando cp deve ser usado dentro do loop para copiar os arquivos para ~/project/backups.
  • Uma instrução echo deve informar o nome de cada arquivo conforme ele é copiado.

Exemplos

Após concluir esta etapa, ao executar o script com um nome de arquivo de backup, ele deve processar todos os arquivos de log e exibir uma saída semelhante a:

./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: full_backup.tar.gz
Backing up logs to: full_backup.tar.gz
Copied /home/labex/project/app_logs/access.log
Copied /home/labex/project/app_logs/debug.log
Copied /home/labex/project/app_logs/error.log
Backup complete.

O script deve percorrer cada arquivo .log no diretório, exibindo uma mensagem "Copied" para cada um. Os nomes exatos dos arquivos dependerão dos arquivos de log presentes no seu diretório app_logs.

Após a conclusão do script, você pode verificar se os arquivos foram copiados checando o diretório backups:

ls ~/project/backups/
access.log  debug.log  error.log

Dicas

  • Você pode criar um diretório usando o comando mkdir.
  • Um loop for para arquivos pode ser escrito como for file in /caminho/para/*.log; do ... done.
  • A sintaxe do comando cp é cp <origem> <destino>.
  • A variável do loop (ex: file) conterá o caminho completo para o arquivo em cada iteração.

Resumo

Parabéns, Artesão de Scripts! Você construiu com sucesso um script shell completo e funcional do zero. Você enfrentou um problema do mundo real — o gerenciamento de arquivos de log — e o resolveu com o poder da automação.

Neste desafio, você dominou vários conceitos fundamentais de shell scripting:

  • Criação e estruturação de um script com shebang.
  • Uso de variáveis para tornar seu script dinâmico.
  • Captura de entrada do usuário com read.
  • Implementação de verificação de erros robusta com instruções if.
  • Automação de tarefas repetitivas com loops for.
  • Gerenciamento de permissões de arquivo e execução de scripts.

Seu script agora pode verificar automaticamente a existência de diretórios de log, processar todos os arquivos de log e copiá-los para um local de backup. Este é um grande passo em sua jornada como engenheiro DevOps ou Administrador de Sistemas. As habilidades que você praticou aqui são a base para escrever scripts de automação muito mais complexos que podem gerenciar servidores, implantar aplicações e processar dados. Você provou que pode lidar com responsabilidades e entregar uma solução funcional. Bom trabalho!

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar