0Pricing
DevOps Bootcamp · Aula

Boas Práticas de Scripting e Análise Estática

Aprenda sobre convenções de código, comentários e o uso de ferramentas como ShellCheck para escrever scripts Bash limpos, legíveis e sem erros.

Boas Práticas de Scripting e Análise Estática é uma aula grátis de DevOps Bootcamp no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de DevOps Bootcamp, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de DevOps Bootcamp inclui 4 aulas no total.

Por que seguir boas práticas de script?

Escrever scripts Bash é poderoso, mas, sem bons hábitos, os scripts podem se tornar difíceis de entender, manter e depurar.

Boas práticas são diretrizes que ajudam você a escrever código limpo, robusto e legível. Elas tornam seus scripts:

  • Mais fáceis de ler: para você e para outras pessoas.
  • Mais fáceis de manter: mais simples de atualizar ou corrigir.
  • Menos propensos a erros: evitando erros comuns.
  • Melhores para colaboração: padronizando a aparência e o comportamento do código.

Use comentários para dar clareza

Os comentários são essenciais para explicar por que seu código faz algo, e não apenas o que ele faz. Eles funcionam como anotações para você no futuro ou para outros desenvolvedores.

Use comentários para:

  • Descrever a finalidade geral do script no início.
  • Explicar lógicas complexas ou seções difíceis.
  • Documentar funções: sua finalidade, argumentos e valores de retorno.

Comece um comentário com o símbolo # (cerquilha).

#!/bin/bash
# This script demonstrates commenting best practices.
# Author: CoddyKit
# Date: 2023-10-27

# Function: greet_user
# Description: Prints a greeting message to the console.
# Arguments:
#   $1 - The name of the user to greet.
greet_user() {
  local name="$1" # Store the first argument in a local variable.
  echo "Hello, ${name}!" # Output the greeting message.
}

# Main script execution starts here.
echo "Script execution started."
greet_user "CoddyKit Learner" # Call the function with a specific name.
echo "Script execution finished."

Convenções de nomenclatura claras

Nomes significativos tornam seu script mais fácil de acompanhar. Evite variáveis de uma só letra, a menos que sejam contadores comuns de laços (como i ou j).

Convenções gerais:

  • Variáveis: use nomes descritivos (por exemplo, user_name, log_file). Use UPPERCASE para variáveis de ambiente ou constantes globais. Use lowercase_with_underscores para variáveis locais do script.
  • Funções: use lowercase_with_underscores, geralmente começando com um verbo (por exemplo, process_data, check_status).
  • Scripts: use lowercase_with_hyphens (por exemplo, backup-script.sh).

Formatação e indentação consistentes

Uma formatação consistente, como indentação e espaçamento, melhora muito a legibilidade. Imagine ler um livro com recuos de parágrafo inconsistentes!

Pontos principais:

  • Use 2 ou 4 espaços para a indentação (geralmente, recomenda-se evitar tabulações).
  • Mantenha as linhas curtas (menos de 80 caracteres é uma boa regra prática para terminais).
  • Use linhas em branco para separar blocos lógicos de código.
  • Alinhe elementos relacionados quando fizer sentido.

A consistência é mais importante do que o estilo específico escolhido.

Robustez: 'set -u' (nounset)

A opção set -u (ou set -o nounset) é uma grande ajuda para evitar erros causados por erros de digitação ou por variáveis acidentalmente não definidas. Se o script tentar usar uma variável à qual nenhum valor foi atribuído, set -u encerrará imediatamente o script com um erro.

Isso ajuda a detectar erros cedo e evita comportamentos inesperados mais adiante no script.

Experimente executar o código abaixo. Ele foi criado para terminar cedo porque UNSET_NAME não está definido.

#!/bin/bash
# Demonstrating 'set -u' (nounset)

set -u # Exit if an unset variable is used

MY_GREETING="Hello"
echo "${MY_GREETING}, CoddyKit!"

# This variable is NOT set. With 'set -u', the script will exit here.
echo "Your name is: ${UNSET_NAME}" 

echo "This line will NOT be reached if 'set -u' is active and UNSET_NAME is indeed unset."

Robustez: 'set -o pipefail'

Quando você conecta comandos por meio de um canal (por exemplo, cmd1 | cmd2 | cmd3), normalmente o Bash informa apenas o status de saída do último comando do canal. Isso significa que, se cmd1 falhar, mas cmd2 e cmd3 forem bem-sucedidos, o canal ainda poderá informar sucesso!

set -o pipefail altera esse comportamento. Se qualquer comando de um canal falhar (retornar um status de saída diferente de zero), o status de saída de todo o canal será esse status diferente de zero.

Isso torna seus canais mais confiáveis, sinalizando imediatamente quando um comando inicial falha.

#!/bin/bash
# Demonstrating 'set -o pipefail'

set -o pipefail # Ensures pipe's exit status is the last non-zero command

echo "Running a failing command in a pipe:"
echo "---"

# 'false' command always fails (exit status 1).
# 'cat /dev/null' always succeeds (exit status 0).
# With 'set -o pipefail', the pipe's overall exit status will be 1 from 'false'.
false | cat /dev/null

# This line will only be reached if the pipe above succeeds.
echo "---"
echo "Script finished successfully (this line won't show if pipe failed with set -o pipefail)."

Conheça o ShellCheck

Mesmo seguindo boas práticas, é fácil deixar passar pequenos erros de sintaxe ou armadilhas comuns. É aí que o ShellCheck entra em ação!

O ShellCheck é uma ferramenta de análise estática (um “linter”) para scripts de shell. Ele lê seu script e aponta:

  • Erros de sintaxe.
  • Erros comuns de iniciantes.
  • Problemas semânticos sutis.
  • Problemas de portabilidade entre diferentes shells.

Ele oferece sugestões úteis, muitas vezes com links para explicações mais detalhadas.

ShellCheck em ação: script incorreto

Vamos analisar um script com alguns problemas comuns. Eles talvez não façam o script travar imediatamente, mas são más práticas ou possíveis erros.

Imagine que você tenha este script salvo como bad_script.sh. Para executar o ShellCheck nele, você digitaria: shellcheck bad_script.sh

Veja se consegue identificar os problemas antes de executar o ShellCheck!

#!/bin/bash
# A script with some common issues

MY_NAME=coddykit # Variable assignment needs no space, but quoting is good for values
echo "Hello $MY_NAME!" # Missing quotes around variable expansion

if [ $1 = "admin" ]; then # Missing quotes around $1
  echo "Welcome, administrator."
fi

# A simple loop with potential issues
for file in *.txt; do # Unquoted glob could expand to multiple arguments
  echo File: $file # Missing quotes around $file
done

Corrigindo avisos do ShellCheck

O ShellCheck produziria uma saída como: SC2086: Double quotes missing around "$MY_NAME". Ele geralmente fornece um código específico (como SC2086) que você pode consultar para obter mais detalhes.

Este é o script anterior, corrigido de acordo com as recomendações do ShellCheck e as boas práticas gerais:

Observe o uso de aspas duplas "" em torno das expansões de variáveis e substituições de comandos para evitar a divisão de palavras e a expansão de curingas, que são fontes comuns de erros.

#!/bin/bash
# A script with issues fixed by ShellCheck

MY_NAME="CoddyKit" # Quote variable assignment values
echo "Hello ${MY_NAME}!" # Always quote variable expansions

if [ "$1" = "admin" ]; then # Quote positional parameters like $1
  echo "Welcome, administrator."
fi

# A simple loop with corrected quoting
for file in *.txt; do 
  echo "File: ${file}" # Quote variable expansions, especially in loops
done

Verificação de boas práticas

Quais das opções a seguir são consideradas boas práticas ao escrever scripts Bash?

Recapitulação: criação de scripts profissionais

Parabéns! Você aprendeu a elevar seus scripts Bash de funcionais a profissionais.

Abordamos:

  • A importância das boas práticas para a legibilidade e a facilidade de manutenção.
  • O uso de comentários e convenções de nomenclatura para garantir clareza.
  • Como tornar os scripts robustos com set -u e set -o pipefail.
  • O poder do ShellCheck para encontrar problemas automaticamente e melhorar seu código.

Ao aplicar esses princípios, você escreverá scripts Bash mais confiáveis, compreensíveis e fáceis de compartilhar. Continue praticando!

Perguntas Frequentes

A aula “Boas Práticas de Scripting e Análise Estática” é grátis?

Sim — o texto completo de “Boas Práticas de Scripting e Análise Estática” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de DevOps Bootcamp, atualize para CoddyKit PRO. O curso de DevOps Bootcamp inclui 4 aulas no total.

O que vou aprender em “Boas Práticas de Scripting e Análise Estática”?

Aprenda sobre convenções de código, comentários e o uso de ferramentas como ShellCheck para escrever scripts Bash limpos, legíveis e sem erros. Você pratica DevOps Bootcamp com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar DevOps Bootcamp?

Nenhuma experiência prévia é necessária. DevOps Bootcamp no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Boas Práticas de Scripting e Análise Estática”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de DevOps Bootcamp?

Sim. Cada aula de DevOps Bootcamp inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Depuração de Scripts Bash (set -x, trap)
  2. Tratamento de Erros e Status de Saída
  3. Boas Práticas de Scripting e Análise Estática
  4. Testar Scripts Bash com Bats
← Voltar para DevOps Bootcamp