DIA 10: O Artesão de Scripts

LinuxBeginner
Pratique Agora

Introdução

Bem-vindo, aspirante a administrador de sistemas! Você acabou de entrar em uma empresa de tecnologia movimentada como Engenheiro DevOps Júnior. Seu colega sênior está em merecidas férias e uma tarefa crítica acabou de chegar à sua mesa. O servidor de aplicação principal está gerando inúmeros arquivos de log, e eles estão consumindo rapidamente o espaço em disco. Sua missão, caso decida aceitá-la, é tornar-se 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 no caminho de aprendizado de Linux.
  2. Discuta com o Labby ou veja a solução.

Escrevendo um Script Shell Simples

Sua primeira tarefa é estabelecer a base. Todo grande script começa com uma única linha. Você precisa criar o arquivo de script e adicionar um comando básico para garantir que ele esteja funcionando corretamente. Este passo 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 ser nomeado 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 necessária.
  • 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 assim:

Primeiro, verifique se o arquivo de script existe:

ls ~/project/
log_manager.sh

Defina 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 filename 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 rótulo para a execução do backup. Isso torna o script adaptável a diferentes situações sem alterar o código em si.

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 definida como /home/labex/project/app_logs.
  • O script deve usar o comando read para obter a 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 a interação deve ser:

./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 o usuário digitar um nome e pressionar Enter. Após o usuário fornecer a entrada, ele exibe a mensagem de confirmação usando o valor inserido. Neste desafio, esse valor é um rótulo de execução mostrado na saída, enquanto a ação real de backup é implementada no Passo 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 de =.
  • Para usar o valor de uma variável, prefixe seu nome com um sinal de $, como $MY_VARIABLE.
  • O comando read pausa o script e aguarda o usuário digitar algo e pressionar Enter.

Implementando Lógica Condicional

Um bom script antecipa problemas. O que acontece se o diretório de log 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 log 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 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 deve usar echo para exibir 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 log 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 log 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 [ condition ]; then ... else ... fi.
  • O teste [ -d "$DIRECTORY_PATH" ] retorna verdadeiro se $DIRECTORY_PATH existir e for um diretório.
  • exit 1 é uma maneira padrão de sinalizar que um script terminou com um erro.

Fazendo Loop nas Operações de Arquivo

Agora, o núcleo da automação! Você precisa processar os arquivos dentro do diretório de log. Você usará um loop for para iterar por todos os arquivos que terminam em .log no diretório app_logs. Para este desafio, você simplesmente os copiará para um novo diretório de backup. A entrada BACKUP_FILENAME permanece como um rótulo de execução impresso na saída, não um arquivo de arquivo criado pelo script.

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 correspondem ao padrão *.log.
  • O comando cp deve ser usado dentro do loop para copiar arquivos para ~/project/backups.
  • Uma instrução echo deve relatar o nome de cada arquivo à medida que é copiado.

Exemplos

Após concluir este passo, 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: 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 deve iterar por cada arquivo .log no diretório, exibindo uma mensagem "Copied" para cada arquivo. Os nomes exatos dos arquivos dependerão dos arquivos de log presentes no seu diretório app_logs.

Após o script terminar, você pode verificar se os arquivos foram copiados verificando 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 (por exemplo, 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ê 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 seu script dinâmico.
  • Capturar a entrada do usuário com read.
  • Implementar verificação de erros robusta com instruções if.
  • Automatizar tarefas repetitivas com loops for.
  • Gerenciar permissões de arquivo e executar seu script.

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. Muito bem!

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