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!
- Pule temporariamente o desafio e continue com os Laboratórios Guiados subsequentes na trilha de aprendizado Linux.
- 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.shno 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
echopara 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
nanopara 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_arquivopara tornar um script executável. O+xadiciona 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_DIRe 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
readpara capturar a entrada do usuário em uma nova variável chamadaBACKUP_FILENAME. - Adicione um comando
echofinal 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_DIRconfigurada como/home/labex/project/app_logs. - O script deve usar o comando
readpara 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
readpausa 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
ifpara verificar se o diretório especificado pela variável$LOG_DIRexiste. - 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
echocom 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
ifbásica éif [ condição ]; then ... else ... fi. - O teste
[ -d "$CAMINHO_DO_DIRETORIO" ]retorna verdadeiro se$CAMINHO_DO_DIRETORIOexistir 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
backupsdentro de~/projectonde 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 loopfor. - O loop deve iterar sobre cada arquivo que termina em
.logdentro do diretório$LOG_DIR. - Dentro do loop, use o comando
cppara 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/backupsa partir da linha de comando. - O script deve usar um loop
for. - O loop deve iterar pelos arquivos em
$LOG_DIRque correspondam ao padrão*.log. - O comando
cpdeve ser usado dentro do loop para copiar os arquivos para~/project/backups. - Uma instrução
echodeve 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
forpara arquivos pode ser escrito comofor 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!



