boas_praticas_de_programacao_shell_script
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anteriorRevisão anteriorPróxima revisão | Revisão anterior | ||
| boas_praticas_de_programacao_shell_script [2018/08/17 17:13] – cartola | boas_praticas_de_programacao_shell_script [2022/03/25 12:09] (atual) – [Documentação] cartola | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | ====== Programação Shell Script: boas práticas ====== | ||
| + | Antes veja [[ti_publica: | ||
| + | |||
| Esse é um guia pessoal de referência. Na maioria dos casos a dica se baseia no **Shell Bash**, mas muitas são genéricas. Anoto aqui dicas que considero úteis, de modo que possa acessá-las de qualquer lugar, aproveitando para compartilhar com quem possa ter interesse. | Esse é um guia pessoal de referência. Na maioria dos casos a dica se baseia no **Shell Bash**, mas muitas são genéricas. Anoto aqui dicas que considero úteis, de modo que possa acessá-las de qualquer lugar, aproveitando para compartilhar com quem possa ter interesse. | ||
| Linha 5: | Linha 8: | ||
| Naturalmente algumas dicas aqui provavelmente servirão pra outras linguagens de programação. A medida que eu perceber isso vou tentar marcá-las como " | Naturalmente algumas dicas aqui provavelmente servirão pra outras linguagens de programação. A medida que eu perceber isso vou tentar marcá-las como " | ||
| + | ===== Referências Externas ===== | ||
| + | |||
| + | ==== Gerais ==== | ||
| + | * [[http:// | ||
| + | ==== Frameworks ==== | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | |||
| + | ==== IDE ==== | ||
| + | |||
| + | IDE é a sigla de Integrated Development Environment, | ||
| + | * Costumo identar com 2 espaços: set tabspace=2 | ||
| + | * Costumo limitar as linhas a 80 colunas:\\ set columns=80\\ set textwidth=80\\ set wrapmargin=8 | ||
| + | * Gosto do [[https:// | ||
| ======= Documentação ======= | ======= Documentação ======= | ||
| Uma etapa bem sedimentada nos conceitos de engenharia de software é a documentação. Já vi muita documentação de sistemas e muito trabalho sendo contratado que exigia a criação de uma. Há uma documentação, | Uma etapa bem sedimentada nos conceitos de engenharia de software é a documentação. Já vi muita documentação de sistemas e muito trabalho sendo contratado que exigia a criação de uma. Há uma documentação, | ||
| - | **Comentários - **DICA GERAL** | + | **Comentários - DICA GERAL** |
| - | **\\ | + | |
| + | | ||
| * **lógica** - em outras situações o programador faz uma lógica mais complexa e não a explica em comentários. Isso é muito ruim, tanto para trabalho em equipe quanto para o próprio programador, | * **lógica** - em outras situações o programador faz uma lógica mais complexa e não a explica em comentários. Isso é muito ruim, tanto para trabalho em equipe quanto para o próprio programador, | ||
| - | **Código bem escrito**\\ | + | **Código bem escrito** |
| * **identação** - além de comentários, | * **identação** - além de comentários, | ||
| * **nomes de variáveis** - dê nomes de variáveis que indiquem seu significado e uso - **DICA GERAL** | * **nomes de variáveis** - dê nomes de variáveis que indiquem seu significado e uso - **DICA GERAL** | ||
| * **nomes de variáveis minúsculos** - é um hábito de muitos programadores Shell o uso de nomes maiúsculos para variáveis. Isso aumenta o risco de acertar o nome de uma variável ambiente, essas sim, tradicionalmente maiúsculas. | * **nomes de variáveis minúsculos** - é um hábito de muitos programadores Shell o uso de nomes maiúsculos para variáveis. Isso aumenta o risco de acertar o nome de uma variável ambiente, essas sim, tradicionalmente maiúsculas. | ||
| - | **Cabeçalho - **DICA GERAL** | + | **Cabeçalho - DICA GERAL** |
| - | **\\Use um cabeçalho padrão nos seus códigos. Um bom cabeçalho pode conter: | + | |
| + | Use um cabeçalho padrão nos seus códigos. Um bom cabeçalho pode conter: | ||
| * Descrição geral do que aquele código faz | * Descrição geral do que aquele código faz | ||
| * Nome do autor e data de criação | * Nome do autor e data de criação | ||
| Linha 26: | Linha 48: | ||
| * Resumo de parâmetros que recebe e que retorna | * Resumo de parâmetros que recebe e que retorna | ||
| + | **Interrompendo o programa em caso de erros** | ||
| + | Alguns erros podem passar limpos pela execução de um shell e isso pode causar problemas difíceis de solucionar depois que o código cresce muito. Uma dica é colocar sempre no início do script a definição: | ||
| + | |||
| + | '' | ||
| + | |||
| + | (Fonte: | ||
| ======= Estrutura do programa ======= | ======= Estrutura do programa ======= | ||
| Linha 41: | Linha 69: | ||
| ======= Testes automatizados ======= | ======= Testes automatizados ======= | ||
| + | Existem linguagens que tem ferramentas pra facilitar isso, existe alias o [[https:// | ||
| - | | + | Um script muitas vezes é pequeno e, nesses casos, a criação de testes talvez não se justifique. Se começar a crescer, se for complexo, se for ser alterado de tempos em tempos, então pode se considerar essa criação dos testes, que garantirá o funcionamento esperado de cada parte do código, evitando que uma eventual alteração faça com que se crie um bug. Essa é a moral da coisa. |
| - | * | + | |
| + | **Refatoração para viabilizar | ||
| + | **\\ | ||
| + | * Funções que recebem e retornam facilitam muito os testes | ||
| + | * Modularizar em outros scripts também pode facilitar, se eles também receberem e retornarem algo | ||
| + | |||
| + | **script | ||
| + | **\\ * Para criar um script externo que teste o principal, o ideal é que o programa principal só seja executado se não for um teste. Ao colocarmos o código separado em funções podemos testar se o principal deve rodar ou não. Para carregar as funções do script principal no script testador usamos a sintaxe: | ||
| + | < | ||
| + | e as funções estarão disponíveis dentro do testador, não sendo executada nenhuma. Ao executar o principal diretamente, | ||
| + | ## PROGRAMA PRINCIPAL | ||
| + | if [ " | ||
| + | echo " | ||
| + | fi | ||
| + | Os resultados da execução de cada uma das formas é o previsto: | ||
| + | $ source principal.sh | ||
| + | $ . principal.sh | ||
| + | $ ./ | ||
| + | programa principal | ||
| + | $ bash principal.sh | ||
| + | programa principal | ||
| + | Notas: | ||
| + | * O comando " | ||
| + | * Mesmo chamando outro shell com " | ||
| + | De resto, portanto, é colocar em funções o que é necessário testar no código e chamar elas dentro da parte principal do programa (que não será testada) e dentro do script testador, que promoverá, idealmente, uma série de testes, verificando o comportamento de cada função para N situações diversas, de modo a garantir a estabilidade do código. | ||
| Linha 66: | Linha 119: | ||
| Exemplo: definindo múltiplas variáveis | Exemplo: definindo múltiplas variáveis | ||
| read filesystem total used free perc name < <(df . | tail -1) | read filesystem total used free perc name < <(df . | tail -1) | ||
| + | |||
| + | |||
| + | ===== Lendo linha a linha e atribuindo colunas a variáveis ===== | ||
| + | |||
| + | echo " | ||
| + | echo " | ||
| + | df | grep -v " | ||
| + | echo " | ||
| + | echo " | ||
| + | done | ||
| + | Resultado da execução: | ||
| + | $ ./ | ||
| + | Sistema | ||
| + | disponivel | ||
| + | / | ||
| + | 2014976 | ||
| + | devtmpfs | ||
| + | 8121660 | ||
| + | tmpfs | ||
| + | 8133648 | ||
| + | |||
| + | * opção de delimitador | ||
| + | * como jogar linha inteira numa variável | ||
| + | * readarray | ||
boas_praticas_de_programacao_shell_script.1534525992.txt.gz · Última modificação: por cartola
