O Artesão de Scripts

ShellBeginner
Pratique Agora

Introdução

Boas-vindas, futuro administrador de sistemas! Você acabou de entrar em uma movimentada empresa de tecnologia como Engenheiro DevOps Júnior. Seu colega sênior está de férias bem merecidas, e uma tarefa crítica acabou de chegar à sua mesa. O servidor principal da aplicação está gerando inúmeros arquivos de log, que estão consumindo rapidamente o espaço em disco. Sua missão, caso decida aceitá-la, é se tornar O Artesão de Scripts.

Você precisa criar um shell script automatizado para gerenciar esses arquivos de log. Isso não envolve apenas executar alguns comandos; trata-se de criar 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, demonstrando seu valor para a equipe e salvando o dia!

Vamos começar a criar scripts!

Aviso importante
Este desafio aborda habilidades que vão além do Quick Start with Linux. Se você ainda não aprendeu esses tópicos, pule este desafio por enquanto e continue com o Linux for Noobs, o próximo curso da trilha de aprendizagem de Linux.
Quando voltar:
  1. Conclua o Guided Lab Shell Scripting Fundamentals e depois volte para tentar este desafio novamente.

Escrevendo um Shell Script simples

Sua primeira tarefa é estabelecer a base. Todo ótimo script começa com uma única linha. Você precisa criar o arquivo do script e adicionar um comando básico para confirmar que ele está funcionando corretamente. Esta etapa inicial verifica se sua configuração está correta e se você está pronto para criar uma lógica mais complexa.

Tarefas

  • Crie um novo arquivo de shell script chamado log_manager.sh no diretório ~/project.
  • Adicione uma linha de "shebang" (#!/bin/bash) no início do script. Ela informa ao sistema qual interpretador deve ser usado.
  • Adicione um comando para exibir na tela a mensagem "Log Manager Initialized.".
  • 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 exigida.
  • O script deve ter permissão de execução (use chmod +x log_manager.sh).

Exemplos

Depois de criar o script e torná-lo executável, o processo completo deve ser semelhante a este:

Primeiro, confirme que o arquivo do script existe:

ls ~/project/
log_manager.sh

Defina a permissão de execução do 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 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 filename para tornar um script executável. O +x adiciona permissão de execução para o proprietário do arquivo.

Adicionando variáveis e entrada do usuário

Um script com valores fixos não é muito flexível. Para tornar seu script mais dinâmico e reutilizável, agora você introduzirá variáveis. Você definirá uma variável para o diretório de logs e solicitará ao usuário um identificador para a execução do backup. Assim, o script poderá se adaptar a diferentes situações sem que seja necessário alterar o próprio código.

Tarefas

  • Modifique o 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 exibir "Enter the backup filename: " e solicitar uma 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]", em que [filename] é o valor informado pelo usuário.

Requisitos

  • O script deve conter uma variável LOG_DIR definida como /home/labex/project/app_logs.
  • O script deve usar o comando read para obter uma 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 uma entrada e exibir a mensagem de confirmação. A interação deve ser semelhante a esta:

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

O script deve pausar no prompt "Enter the backup filename:", aguardando que você digite um nome e pressione Enter. Depois que você fornecer a entrada, ele exibirá a mensagem de confirmação usando o valor informado. Neste desafio, esse valor é um identificador da execução exibido na saída; a ação real de backup será implementada na Etapa 4, copiando arquivos .log para ~/project/backups.

Dicas

  • Para definir uma variável, use a sintaxe VARIABLE_NAME="value". Não deve haver espaços ao redor do sinal =.
  • Para usar o valor de uma variável, coloque um sinal $ antes do nome, como em $MY_VARIABLE.
  • O comando read pausa o script e espera que você digite algo e pressione Enter.

Implementando lógica condicional

Um bom script antecipa problemas. O que acontece se o diretório de logs especificado não existir? O script falhará. Para torná-lo mais robusto, você precisa adicionar uma lógica condicional. Use uma instrução if para verificar se o diretório de logs existe antes de tentar realizar qualquer operação.

Tarefas

  • Modifique o 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 deverá continuar como antes, solicitando o nome do arquivo e assim por diante.
  • Se o diretório não existir, o script deverá exibir a mensagem de erro "Error: Log directory not found." e sair 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 deverá usar echo para exibir a mensagem de erro especificada.
  • Se o diretório não existir, o script deverá ser encerrado usando exit 1.

Exemplos

Quando o diretório de logs existir, o script deverá ser executado 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 deverá exibir um erro e sair:

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

Nesse caso, o script será encerrado imediatamente depois de exibir a mensagem de erro, sem solicitar uma entrada do usuário nem prosseguir com operações de backup.

Dicas

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

Percorrendo operações com arquivos usando um loop

Agora chegamos ao núcleo da automação! Você precisa processar os arquivos dentro do diretório de logs. Use um loop for para percorrer todos os arquivos que terminam com .log no diretório app_logs. Neste desafio, você simplesmente os copiará para um novo diretório de backup. A entrada BACKUP_FILENAME continua sendo um identificador da execução exibido na saída, e não um arquivo compactado criado pelo script.

Tarefas

  • Primeiro, crie um diretório chamado backups dentro de ~/project, para onde os arquivos de log serão copiados.
  • Modifique o script log_manager.sh.
  • Dentro do bloco if, no qual é confirmado que o diretório existe, adicione um loop for.
  • O loop deve percorrer todos os arquivos que terminam com .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, exiba uma mensagem como "Copied [filename]".

Requisitos

  • Primeiro, você deve criar o diretório ~/project/backups pela linha de comando.
  • O script deve usar um loop for.
  • O loop deve percorrer os arquivos de $LOG_DIR que correspondem 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 à medida que ele for copiado.

Exemplos

Depois de concluir esta etapa, ao executar o script com um nome de backup, ele deverá processar todos os arquivos de log e exibir uma saída semelhante a esta:

./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: daily_backup
Backing up logs to: daily_backup
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 deverá percorrer cada arquivo .log do diretório e exibir uma mensagem "Copied" para cada arquivo. Os nomes exatos dependerão dos arquivos de log presentes no diretório app_logs.

Depois que o script for concluído, você poderá verificar se os arquivos foram copiados conferindo 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 /path/to/*.log; do ... done.
  • A sintaxe do comando cp é cp <source> <destination>.
  • A variável do loop, como file, conterá o caminho completo do arquivo em cada iteração.

Resumo

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

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

  • Criar e estruturar um script com um shebang.
  • Usar variáveis para tornar o script dinâmico.
  • Capturar a entrada do usuário com read.
  • Implementar uma verificação robusta de erros com instruções if.
  • Automatizar tarefas repetitivas com loops for.
  • Gerenciar permissões de arquivos e executar o script.

Agora, seu script pode verificar automaticamente a existência de diretórios de logs, 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 praticadas aqui são a base para escrever scripts de automação muito mais complexos, capazes de gerenciar servidores, implantar aplicações e processar dados. Você provou que consegue assumir responsabilidades e entregar uma solução funcional. Muito bem!

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