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!
- Pule temporariamente este desafio e continue com os Laboratórios guiados seguintes no percurso de aprendizagem do Linux.
- 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.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õ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 filenamepara 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 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_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 armazenar 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 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
readpausa 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
ifpara verificar se o diretório especificado pela variável$LOG_DIRexiste. - 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
echopara 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
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 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
backupsdentro 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 loopfor. - O loop deverá percorrer todos os arquivos terminados 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, 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 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 à 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
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 (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!



