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!
- 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.shno 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
echopara 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 filenamepara tornar um script executável. O+xadiciona 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_DIRe 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
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]", em que[filename]é o valor informado pelo usuário.
Requisitos
- O script deve conter uma variável
LOG_DIRdefinida como/home/labex/project/app_logs. - O script deve usar o comando
readpara 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
readpausa o script e espera que você digite algo e pressioneEnter.
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
ifpara verificar se o diretório especificado pela variável$LOG_DIRexiste. - 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
echopara 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
ifbásica éif [ condition ]; then ... else ... fi. - O teste
[ -d "$DIRECTORY_PATH" ]retorna verdadeiro se$DIRECTORY_PATHexistir 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
backupsdentro 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 loopfor. - O loop deve percorrer todos os arquivos que terminam com
.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, exiba uma mensagem como "Copied [filename]".
Requisitos
- Primeiro, você deve criar o diretório
~/project/backupspela linha de comando. - O script deve usar um loop
for. - O loop deve percorrer os arquivos de
$LOG_DIRque correspondem 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 à 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
forpara arquivos pode ser escrito comofor 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!



