Especialista Linux

Script Shell ou Programa em Shell?

Quando falamos a palavra script é natural já pensarmos no contexto de roteiro. Algo com começo meio e fim. Como um “script de peça de teatro”.

Shell Script ou Programa em Shell?

No Shell, um script não é muito diferente disto. São comandos um após o outro, que são executados em sequência. Quando comecei a usar o linux, no final da década de 90, scripts eram encarados como programas. Existia uma disciplina dos programadores ao criá-los. Eram estruturados, com cabeçalho, versionamento e dados do mantenedor. Com o passar do tempo e a chegada das certificações formando Administradores de Sistemas a toque de caixa, os scripts foram aos poucos sendo substituídos por ferramentas prontas e observei que hoje em dia são poucos os sysadmins que se dedicam a criar bons scripts.

Em geral quando olhamos scripts criados por Administradores de Sistemas, dá aquela de impressão de algo feito nas coxas. Ainda tinha um jargão que ouvi muito:

“Simplesmente, Funciona!”

Mas não tem nada de simples. Por que sem comentário e um código limpo e estruturado, ele pode até atender aquele problema, mas provavelmente não vai ser atualizado e vai acabar morrendo, como centenas e centenas de scripts criados temporariamente todo o tempo.

Como a grande maioria dos Sysadmins não são programadores é natural que os scripts sejam em maioria escritos em “cinco minutos”. Eu mesmo não sou programador!, apesar de minha formação em engenharia da computação. Sempre atuei servidores linux diversos e segurança, mas raramente programo, no entanto, quando vou criar algo, tenho o cuidado de fazer o mínimo possível, para que outros possam entender e dar continuidade ao trabalho.

É pensando em tudo isto, que decidi escrever este artigo, ele é de “Sysadmin para Sysadmin”. Amigos, façam o melhor possível em seus Scripts Shell e transforme-os em programas em Shell.

Qual a diferença entre um script e um programa?

No nosso contexto (servidores linux) eu sempre diferenciei um script de um programa em shell, analisando o seguinte:

  • Script é escrito de qualquer maneira
  • Código feito e mal estruturado, sem quebra de linha
  • Sem manutenção
  • Feito rapidamente para atender um problema cotidiano

Quando olho um programa em shell:

  • Codificação estruturada
  • Código limpo
  • Feito por um Administrador experiente ou um Programador
  • Bugs informados e corrigidos
  • Programa em evolução

Comece a escrever programas

Agora que entendemos esta diferença entre script e programa, vamos começar a conhecer o básico sobre como escrever bons programas em shell.

Um bom cabeçalho

O cabeçalho deve dar uma explicação geral sobre o programa. O cabeçalho é um texto comentado (#). Exemplo:

# Este programa mostra informações dos dispositivos PCI da máquina.
# Você pode usar a sintaxe -d para mais detalhes, exemplo:
# hardinfo -d

Um bom cabeçalho contêm:

  • Nome
  • Contatos
  • Mantenedor
  • Exemplo
  • Versionamento
  • Testado

Exemplo de um código estruturado:

#!/usr/bin/env bash

#

# Clonar Moodle

#

# Site:   http://www.profjulianoramos.com.br

# Autor:   Juliano Ramos

# Manutenção:  Juliano Ramos

#

# ------------------------------------------------------------------------ #

# Este programa irá clonar o moodle do servidor para o ambiente de homologação

#

# Exemplos:

#   $ ./clonarmoodle -h

#   Neste exemplo o script será executado no modo debug 

# ------------------------------------------------------------------------ #

# Histórico:

#

#  v1.0 17/05/2020, Juliano:

#    - Início do programa

#    - Conta com a funcionalidade X

#  v1.1 17/06/2020, Juliano

#    - Alterado parametro XXXXX

# ------------------------------------------------------------------------ #

# Testado em:

#  bash 4.4.19

# Ksh, Zsh, Dash, Fish 

# Ubuntu, Deepin, Debian, Suse

# ------------------------------------------------------------------------ #

# Agradecimentos:

#

# 	Tux - Encontrou um bug no parametro -h

# Licença: GPL	 

As vezes o cabeçalho pode ficar maior que o programa, mas isto não é um problema, já que o interpretador ignora as linhas de comentário. Ou seja, isto não vai influenciar no desempenho do seu programa.

Quebrando as linhas

É comum ver scripts assim:

dialog --title "Programa xyz" --msgbox "Programa de analise de hardware" 0 0 

Mas, para facilitar a leitura:

dialog \
--title "Programa xyz" \
--msgbox "Programa de analise de Hardware" \
0 0

Na próxima parte deste artigo, vou abordar sobre os tipos de comentários que podemos adicionar aos nossos programas em shell.