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.050 ]

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

Instalando e configurando um dock igual ao Mac Leopard no KDE

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

Proteja seu website ou página html com encriptaçâo

Proteção de tela ou vídeo como papel de parede

Letras brilhantes com Gimp

Leitura recomendada

Relatório do sistema (Shel Script + PHP)

Criando Autoridades Certificadores e Certificados de Testes no Linux

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

Brincando com pseudoterminais e redirecionamentos

getopts: criando scripts Bash com parâmetros e argumentos personalizáveis

  
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