Aprendendo a melhorar os seus scripts

Qual é o processo de pensamentos que leva uma pessoa a criar um script para fazer tarefas longas e cansativas em tarefas simples e rápidas? Nesse artigo eu quero levar você para dentro do cérebro de um criador de scripts para que você possa pensar como um programador e criar os seus próprios scripts de uma forma eficaz e elevar o nível para avançado. Caso você seja um novato e tem medo do terminal, esse artigo pode mudar o seu ponto de vista e te dar coragem para criar seus próprios scripts.

[ Hits: 7.192 ]

Por: M4iir1c10 em 15/05/2020 | Blog: https://github.com/mauricioph


Procurar, procurar e procurar comandos



Muito bem, agora que já podemos preencher a variável com um comando que sempre vai mudar quando o servidor tiver uma nova versão, vamos procurar informar o nosso script qual é a versão atual que temos instalada no nosso sistema.

- "Pô Maurício, é fácil né?... a versão é a 4.4.2.0, é só escrever isso na variável..."

- Não pequeno Jedi, uma variável muda, isso quer dizer que a melhor forma de escrever ela não é à mão e sim com um comando que busca este valor.

Sabemos que o servidor já esta instalado, agora temos que perguntar onde ele está instalado? Quais são as pastas que contém os arquivos de configuração e outros que o sistema pode consultar para saber qual é a versão dele mesmo?

Para descobrir onde os programas estão instalados no Linux, um comando excelente é o whereis:

whereis emby-server
emby-server: /etc/emby-server.conf /opt/emby-server/bin/emby-server

Caso você não tenha ele instalado, o resultado deste comando será:

emby-server:

O binário do servidor está em /opt e a configuração em /etc, podemos abrir a configuração para dar uma olhada.

O diretório padrão para os arquivos é /var/lib/emby.

Procurar um arquivo dentro desta pasta manualmente é loucura, eu tenho na minha instalação mais de 40 mil arquivos dentro desta pasta. Por tanto, vamos procurar onde a versão do sistema pode aparecer, arquivos de log.

find /var/lib/emby -iname "*.log"

Não retorna nada... hum... outra opção seria procurar em arquivos de texto. Porque como o log é um arquivo de texto, é muito comum encontrar programadores que invés de salvar como .log, salvam como .txt:

find /var/lib/emby -iname "*.txt"
/var/lib/emby/cache/thumbnail-failures.txt
/var/lib/emby/cache/tvdb/time.txt
/var/lib/emby/cache/ffmpeg/version_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/filters_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/protocols_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/decoders_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/encoders_4.4.2.0.txt
/var/lib/emby/cache/ffmpeg/hwaccels_4.4.2.0.txt
/var/lib/emby/logs/embyserver.txt
/var/lib/emby/logs/hardware_detection-63724827071.txt
/var/lib/emby/logs/embyserver-63724827062.txt
/var/lib/emby/logs/embyserver-63724824148.txt
/var/lib/emby/logs/embyserver-63724924800.txt
/var/lib/emby/logs/hardware_detection-63724824158.txt
/var/lib/emby/logs/ffmpeg-transcode-3384ea64-b008-406e-99e8-abad83f67062_1.txt
/var/lib/emby/data/channels.txt
/var/lib/emby/data/lastversion.txt
/var/lib/emby/data/connect.txt
/var/lib/emby/data/device.txt


- Hum, agora vemos uns arquivos interessantes... ei, olha /var/lib/emby/logs/embyserver.txt ali, deve ter com certeza a versão instalada... EPA!!! olha mais abaixo, /var/lib/emby/data/lastversion.txt, será que a informação da última versão está lá também?

- Sim pequeno Jedi... eu já consigo ver o sorriso no rosto dos minimalistas que gritavam na página anterior. Isso quer dizer que o resultado de todo o nosso exercício na página anterior está escrito ali no nosso próprio servidor, mas mesmo assim eu escrevi aqui porque essa é a jornada.

Amigo leitor, eu sei que você deve estar bravo também ou frustado por ter que ler todo o processo na página anterior e descobrir que a solução é mais simples, mas vamos olhar o lado positivo. Se você não passar por isso, não adquire conhecimento que te será útil no futuro.

Durante a criação do seu script vai aprender a repetir uma tarefa de forma mais eficaz. Portanto não se apegue ao método que você usa, não fique repetindo o mesmo método sempre.

Por isso que existem APIs, módulos, bibliotecas, tudo para evitar a repetição. Mas isso é conversa para o futuro... um dia quando você for um cara experiente, volte a esta página e você vai entender isso.

Já que lendo o arquivo /var/lib/emby/data/lastversion.txt você tem o mesmo resultado alcançado na página anterior, não vamos trocar o curl + cut para usar somente o cat:

cat /var/lib/emby/data/lastversion.txt

Agora vamos voltar o nosso foco para a versão do servidor. Se você usar cat para ler /var/lib/emby/logs/embyserver.txt, vai cair para trás de tantas linhas neste log, no meu são mais de 500 mil linhas, portanto vamos procurar palavras chaves acrescentando ao cat o grep + a palavra que queremos procurar.

cat /var/lib/emby/logs/embyserver.txt | grep version

Retorna bem menos itens, no meu caso são mais de 12 mil linhas... eu sei são muitas, mas de 500 mil para 12 mil já melhorou... ;) mas ainda assim, tem muita informação. Vamos buscar por 4.4.2.0 no final para achar o número da versão que queremos.

Fazendo isso encontramos 11 mil linhas com "version: 4.4.2.0". Melhorou... mas ainda é muito... onde você colocaria a informação da versão do seu aplicativo em um log? No cabeçalho, mas se continuar usando o cat vamos ter mais de 500 mil linhas para chegar ao cabeçalho... a não ser que tenha uma ferramenta que lê só as primeiras linhas do arquivo.

- Elementar meu caro Jedi, tem o head e lá está a informação que precisamos, na primeira linha.

2020-05-13 00:00:00.013 Info App: Application version: 4.4.2.0

- Legal, vamos filtrar essa linha com head, sed, cut... - Você pergunta.

- Pequeno Jedi, porque não usar só uma ferramenta? Com o awk podemos dizer que queremos só a linha com o "Application version:" e imprimir somente o valor que queremos, contando os espaços a versão vai ficar na sétima posição, assim sendo vamos usar este comando:

awk '/Application version:/ {print $7}' /var/lib/emby/logs/embyserver.txt

Agora que temos as duas variáveis, podemos melhorar o nosso script com um "if" para somente executar se a versão instalada e a última lançada são diferentes.

#!/bin/bash

release=$(cat /var/lib/emby/data/lastversion.txt)
myversion=$(awk '/Application/ {print $7}' /var/lib/emby/logs/embyserver.txt)
 
if [ "$myversion" != "${release}" ]
then wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${release}/emby-server-deb_${release}_amd64.deb
systemctl stop emby-server
dpkg -i emby-server-deb_${release}_amd64.deb
systemctl start emby-server
fi

Você acha que acabou? Tem mais na próxima página.

Página anterior     Próxima página

Páginas do artigo
   1. Tudo começa com o problema
   2. Quebrando o processo em pequenas tarefas
   3. Primeiras linhas
   4. Procurar, procurar e procurar comandos
   5. Melhorando o script
Outros artigos deste autor

Máquina Enigma e encriptação em XOR

Instalando e configurando um dock igual ao Mac Leopard no KDE

Criando vídeo com características de DVD

Raios de luz explodindo atrás do texto

Servidor de Mídia com 128 MB de RAM

Leitura recomendada

Processamento Paralelo em Shell Script - Conversão de Arquivos WAV para MP3

Brincando com pseudoterminais e redirecionamentos

Yad 0.16 - Eu quero sempre mais de ti

Gerar músicas aleatórias com YAD (Modo Gráfico)

Ubuntu 14.04 no AD com CiD

  
Comentários
[1] Comentário enviado por Mc.Eagle em 15/05/2020 - 10:57h

Uma excelente aula de script, eu já me aventurei a fazer alguns que uso diariamente, porém não tenho a "base", até comprei alguns livros sobre o assunto mas confesso que as "distrações" do dia a dia tem me distanciado do objetivo. Mas realmente está sendo uma aula esse artigo. Força e honra!

[2] Comentário enviado por maurixnovatrento em 15/05/2020 - 16:26h


Tá bom demais. Muito bom mesmo. Método muito bem estratégico.

___________________________________
Conhecimento não se Leva para o Túmulo.

[3] Comentário enviado por eduardo em 18/05/2020 - 13:46h

Artigo sensacional! Parabéns!
Ensinar o "caminho das pedras" não é negativo, mas necessário. É melhor aprender como se chegou à conclusão do que ter a resposta pronta :)

[4] Comentário enviado por maurixnovatrento em 28/05/2020 - 14:07h


[3] Comentário enviado por eduardo em 18/05/2020 - 13:46h

Artigo sensacional! Parabéns!
Ensinar o "caminho das pedras" não é negativo, mas necessário. É melhor aprender como se chegou à conclusão do que ter a resposta pronta :)


Isso é verdade! Já até estou usando esse estilo de programação. Faz diferença mesmo.



[5] Comentário enviado por amaurybsouza em 31/05/2020 - 14:41h

Ficou massa demais, método de explicação eficiente e bem didático! Top.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts