O Artesão de Scripts

ShellBeginner
Pratique Agora

Introdução

Bem-vindo, futuro administrador de sistemas! Você acaba de ingressar em uma movimentada empresa de tecnologia como Engenheiro DevOps Júnior. Seu colega sênior está desfrutando de merecidas férias, e uma tarefa crítica acaba 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, é tornar-se O Artesão de Scripts.

Você precisa criar um script de shell automatizado para gerenciar esses arquivos de log. Não se trata apenas de executar alguns comandos, mas de construir uma ferramenta robusta e reutilizável. Você começará com um script simples e, gradualmente, adicionará 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
Os próximos desafios podem ultrapassar o escopo do curso Introdução rápida ao Linux.
Se encontrar dificuldades durante o desafio:
  1. Pule temporariamente este desafio e continue com os Laboratórios guiados seguintes no percurso de aprendizagem do Linux.
  2. Converse com o Labby ou consulte a solução.

Escrevendo um Script de Shell 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 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 de shell 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ões 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, verifique se o arquivo do script existe:

ls ~/project/
log_manager.sh

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

chmod +x ~/project/log_manager.sh

Agora execute o script:

./log_manager.sh

O script deverá exibir:

Log Manager Initialized.

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

cat ~/project/log_manager.sh

O arquivo deverá 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ões 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 torná-lo 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 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 armazenar 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 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 deverá solicitar uma entrada do usuário e exibir a mensagem de confirmação. A interação deverá ser semelhante a esta:

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

O script deverá pausar no prompt "Enter the backup filename:", aguardando que o usuário digite um nome e pressione Enter. Depois que a entrada for fornecida, 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, prefixe seu nome com o símbolo $, como em $MY_VARIABLE.
  • O comando read pausa o script e aguarda 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 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á prosseguir normalmente, solicitando o nome do arquivo e realizando as etapas seguintes.
  • Se o diretório não existir, o script deverá exibir a mensagem de erro "Error: Log directory not found." e ser encerrado 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 com 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 ser encerrado:

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

Nesse caso, o script será encerrado imediatamente após 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 devido a um erro.

Percorrendo Operações com Arquivos

Agora chegamos ao ponto central da automação! Você precisa processar os arquivos dentro do diretório de logs. Usará um loop for para percorrer todos os arquivos terminados em .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 de arquivamento 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 (onde a existência do diretório é confirmada), adicione um loop for.
  • O loop deverá percorrer todos os arquivos terminados 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, 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 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 à 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, exibindo 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 consultando 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 do arquivo em cada iteração.

Resumo

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

Neste desafio, você dominou vários conceitos fundamentais de criação de scripts de shell:

  • Criar e estruturar um script com uma linha de shebang.
  • Usar variáveis para tornar o script dinâmico.
  • Capturar a entrada do usuário com read.
  • Implementar verificações robustas 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 dos diretórios de logs, processar todos os arquivos de log e copiá-los para um local de backup. Este é um grande avanço na 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