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!
- Pule temporariamente o desafio e continue com os Laboratórios Guiados subsequentes no caminho de aprendizado de Linux.
- 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.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 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
echopara 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
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 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 (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_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_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 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
readpausa 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
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 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
echopara 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
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 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
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 correspondem ao padrão*.log. - O comando
cpdeve ser usado dentro do loop para copiar arquivos para~/project/backups. - Uma instrução
echodeve 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
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 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!



