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: 6.604 ]

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


Melhorando o script



- Que legal, conseguimos fazer um script que funciona...

- Sim pequeno Jedi, mas a ideia do script não é só fazer o script funcionar e sim melhorar ele.

- Sim Maurício, mas fizemos o script pegar a informação offline invés de online e ainda conseguimos fazer o script reconhecer qual é a versão e quando que ele tem que baixar... está bom.

- Pequeno Jedi, o bom é inimigo do melhor.

Vamos pensar nos problemas que podemos ter com esse script, primeiro estamos falando de atividades administrativas, instalar aplicativos, parar e reiniciar serviços do sistema. Esse script tem que saber quem está chamando ele.

Para isso vamos adicionar um "if" que se o usuário for administrativo, ele roda, se não ele recusa rodar.

if [ "${USER}" != "root" ]
then echo "O usuario ${USER} não esta autorizado a executar este script, use sudo $0 ou peça ao administrador para executar."
exit 1
fi

Outra coisa que podemos fazer para melhorar a leitura deste código é diminuir o tamanho do "if" que executa os comandos de instalação. Para isso devemos criar uma função com todos os comandos que queremos usar e chamar essa função se a condição permitir.

Também podemos usar operadores lógicos & - && - | - || - ;

Fazendo isso podemos tirar todos if, then, else e fi. [ponto e virgula] ; vai executar os dois comandos um após o outro. Só que para executar o segundo ele espera o primeiro terminar.

[ and duplo ] && só roda o segundo comando se o primeiro funcionar ou ter um resultado positivo.

[ dupla barra vertical ] || só vai rodar o segundo comando se o primeiro comando falhar. Se o primeiro comando funcionar então o segundo comando não roda.

[ and ] & vai iniciar o primeiro e o segundo comando juntos, independente do primeiro ter funcionado ou não.

[ barra vertical ] | vai executar os dois comandos passando o resultado do primeiro como um argumento para o segundo.

Eu sei, isso que eu expliquei soa confuso agora, mas leia novamente essa explicação acima e pratique nos seus scripts... com o tempo a informação vai fazer sentido.

Comentários é outra coisa que podem ajudar no futuro, se você tiver que fazer alguma alteração no seu código. Principalmente se seus scripts são grandes e complexos. Um comentário em bash é antecipado por "#".

#!/bin/bash
# Quem está rodando o script tem acesso a administração?
[[ "${USER}" != "root" ]] && echo "O usuário de id ${USER} não está autorizado a rodar este script, use sudo $0 ou peça ao administrador para executar." && exit 1

# Variáveis de versão
release=$(cat /var/lib/emby/data/lastversion.txt)
myversion=$(awk '/Application/ {print $7}' /var/lib/emby/logs/embyserver.txt)
 
# Função de atualização
function atualizar(){
    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
}
 
# Atualizar se a versão for diferente
[[ "$myversion" != "${release}" ]] && atualizar || echo "Emby ja esta atualizado"

- O código ficou mais bonitinho, mas é só isso? Qual foi a melhora deste script além da aparência?

- Vamos testar as 4 versões do script para ver quanto tempo demora para executá-los, tem uma ferramenta chamada "time" que diz quanto tempo um programa ou script demora para terminar a execução.

time sudo emby-update

Versão idiota = 26 segundos
Baixando e instalando toda vez que é chamado.

Versão funcional online = 1.128 segundos
Buscando a informação da versão no site.

Versão funcional offline = 0.040 milésimos de segundo
Buscando a versão no arquivo de texto.

Versão melhorada = 0.019 milésimos de segundos
Última versão mais enxuta.

Eu entendo que esse script parece mais bonito, porém quando você tem um script longo onde a mesma atividade se repete várias vezes e muitos "ifs", ao fazer essa limpeza, além de ficar mais compreensível, vai ficar mais fácil de fazer manutenção e vai executar de forma mais eficiente.

Espero que tenham gostado e aprendido algo novo. Fiquem à vontade para comentar e espalhar esse artigo aos futuros cowboys do teclado.

Página anterior    

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

GRUB com imagens aleatórias e KDM com vídeo de fundo

5 comandos que ninguém nunca deve executar no Linux

Criando vídeo com características de DVD

Bug afeta todas as distros

MEncoder - Criando Programa Gráfico Para Conversão

Leitura recomendada

Simples sistema de backup com acesso remoto

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

BackRE - Seu script de backup remoto

Relatório de sistema via browser (shell script + CGI)

Shell Script nosso de cada dia - Episódio 3

  
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