Buone pratiche di scripting e linting
Impari le convenzioni di codifica, l’uso dei commenti e di strumenti come ShellCheck per scrivere script Bash chiari, leggibili e privi di errori.
Buone pratiche di scripting e linting è una lezione Linux Command Line & Bash Scripting Mastery gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Linux Command Line & Bash Scripting Mastery, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Linux Command Line & Bash Scripting Mastery include 4 lezioni in totale.
Perché adottare le best practice per gli script?
Scrivere script Bash è potente, ma senza buone abitudini gli script possono diventare difficili da comprendere, mantenere e sottoporre a debug.
Le best practice sono linee guida che aiutano a scrivere codice pulito, robusto e leggibile. Rendono gli script:
- Più facili da leggere: per Lei e per gli altri.
- Più facili da mantenere: più semplici da aggiornare o correggere.
- Meno soggetti a errori: aiutano a prevenire gli sbagli più comuni.
- Più adatti alla collaborazione: standardizzano l'aspetto e il comportamento del codice.
Commenti per una maggiore chiarezza
I commenti sono fondamentali per spiegare perché il codice esegue un'operazione, non solo che cosa esegue. Fungono da appunti per Lei in futuro o per altri sviluppatori.
Usi i commenti per:
- Descrivere lo scopo generale dello script all'inizio.
- Spiegare la logica complessa o le sezioni più difficili.
- Documentare le funzioni: il loro scopo, gli argomenti e i valori restituiti.
Inizi un commento con il simbolo # (cancelletto).
#!/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."Convenzioni chiare per i nomi
I nomi significativi rendono lo script più facile da seguire. Eviti le variabili composte da una sola lettera, a meno che non si tratti di comuni contatori di ciclo (come i o j).
Convenzioni generali:
- Variabili: usi nomi descrittivi (ad esempio
user_name,log_file). UsiUPPERCASEper le variabili d'ambiente o le costanti globali. Usilowercase_with_underscoresper le variabili locali dello script. - Funzioni: usi
lowercase_with_underscores, spesso iniziando con un verbo (ad esempioprocess_data,check_status). - Script: usi
lowercase_with_hyphens(ad esempiobackup-script.sh).
Formattazione e indentazione coerenti
Una formattazione coerente, ad esempio per indentazione e spaziatura, migliora notevolmente la leggibilità. Immagini di leggere un libro con rientri dei paragrafi incoerenti!
Punti chiave:
- Usi 2 o 4 spazi per l'indentazione (spesso si sconsigliano i tab).
- Mantenga le righe brevi (meno di 80 caratteri è una buona regola pratica per i terminali).
- Usi righe vuote per separare i blocchi logici di codice.
- Allinei gli elementi correlati quando è opportuno.
La coerenza è più importante dello stile specifico scelto.
Robustezza: 'set -u' (nounset)
L'opzione set -u (o set -o nounset) è preziosa per prevenire gli errori causati da refusi o variabili accidentalmente non impostate. Se lo script tenta di usare una variabile a cui non è stato assegnato alcun valore, set -u termina immediatamente lo script con un errore.
Questo aiuta a individuare tempestivamente gli errori, prevenendo comportamenti imprevisti nelle fasi successive dello script.
Provi a eseguire il codice qui sotto. È progettato per terminare subito perché UNSET_NAME non è definita.
#!/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."Robustezza: 'set -o pipefail'
Quando concatena i comandi tramite pipe (ad esempio cmd1 | cmd2 | cmd3), normalmente Bash segnala solo lo stato di uscita dell'ultimo comando della pipe. Ciò significa che, se cmd1 non riesce ma cmd2 e cmd3 hanno successo, la pipe potrebbe comunque segnalare un successo!
set -o pipefail modifica questo comportamento. Se uno qualsiasi dei comandi della pipe non riesce (restituisce uno stato di uscita diverso da zero), lo stato di uscita dell'intera pipe sarà quello stato diverso da zero.
In questo modo le pipeline diventano più affidabili, segnalando immediatamente il fallimento di un comando iniziale.
#!/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)."Introduzione a ShellCheck
Anche seguendo le best practice, è facile trascurare piccoli errori di sintassi o problemi comuni. È qui che entra in gioco ShellCheck!
ShellCheck è uno strumento di analisi statica (un «linter») per gli script della shell. Legge lo script e segnala:
- Errori di sintassi.
- Errori comuni dei principianti.
- Problemi semantici non evidenti.
- Problemi di portabilità tra shell diverse.
Fornisce suggerimenti utili, spesso con collegamenti ad approfondimenti.
ShellCheck in azione: script errato
Esaminiamo uno script con alcuni problemi comuni. Potrebbero non causare l'arresto immediato dello script, ma rappresentano cattive pratiche o potenziali bug.
Immagini di avere questo script salvato come bad_script.sh. Per eseguire ShellCheck su di esso, dovrebbe digitare: shellcheck bad_script.sh
Provi a individuare i problemi prima di eseguire 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
doneCorrezione degli avvisi di ShellCheck
ShellCheck produrrebbe un output simile a: SC2086: Double quotes missing around "$MY_NAME". Spesso fornisce un codice specifico, come SC2086, che può consultare per ulteriori dettagli.
Ecco lo script precedente, corretto secondo i suggerimenti di ShellCheck e le best practice generali:
Noti l'uso delle virgolette doppie "" attorno alle espansioni delle variabili e alle sostituzioni di comando, per evitare la suddivisione delle parole e l'espansione dei glob, fonti comuni di bug.
#!/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
doneVerifica delle best practice
Quali delle seguenti sono considerate buone pratiche nella scrittura di script Bash?
Riepilogo: scripting professionale
Congratulazioni! Ha imparato a portare i suoi script Bash da semplicemente funzionanti a professionali.
Abbiamo trattato:
- L'importanza delle best practice per la leggibilità e la manutenibilità.
- L'uso di commenti e convenzioni di denominazione per maggiore chiarezza.
- Come rendere robusti gli script con
set -ueset -o pipefail. - L'efficacia di ShellCheck nel trovare automaticamente i problemi e migliorare il codice.
Applicando questi principi, scriverà script Bash più affidabili, comprensibili e facili da sviluppare in collaborazione. Continui a fare pratica!
Domande Frequenti
La lezione «Buone pratiche di scripting e linting» è gratuita?
Sì — il testo completo di «Buone pratiche di scripting e linting» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Linux Command Line & Bash Scripting Mastery, passa a CoddyKit PRO. Il corso Linux Command Line & Bash Scripting Mastery include 4 lezioni in totale.
Cosa imparerò in «Buone pratiche di scripting e linting»?
Impari le convenzioni di codifica, l’uso dei commenti e di strumenti come ShellCheck per scrivere script Bash chiari, leggibili e privi di errori. Eserciti Linux Command Line & Bash Scripting Mastery con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Linux Command Line & Bash Scripting Mastery?
Non è richiesta alcuna esperienza precedente. Linux Command Line & Bash Scripting Mastery su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Buone pratiche di scripting e linting»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Linux Command Line & Bash Scripting Mastery?
Sì. Ogni lezione Linux Command Line & Bash Scripting Mastery include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Debug degli script Bash (set -x, trap)
- Gestione degli errori e stato di uscita
- Buone pratiche di scripting e linting
- Testare gli script Bash con Bats