Come faccio a verificare la syntax di uno script Bash senza eseguirlo?

È ansible controllare una syntax di script bash senza eseguirla?

Usando Perl, posso eseguire perl -c 'script name' . Esiste un comando equivalente per gli script di bash?

 bash -n scriptname 

Forse un avvertimento ovvio: questo convalida la syntax ma non controlla se lo script di bash tenta di eseguire un comando che non è nel tuo percorso, come ech hello invece di echo hello .

Il tempo cambia tutto. Ecco un sito Web che fornisce il controllo della syntax online per lo script della shell.

Ho scoperto che è molto potente rilevare errori comuni.

inserisci la descrizione dell'immagine qui

Informazioni su ShellCheck

ShellCheck è un’analisi statica e uno strumento di sfilacciamento per script sh / bash. Si concentra principalmente sulla gestione di errori e errori di syntax tipici dei principianti e di livello intermedio, in cui la shell fornisce un messaggio di errore criptico o uno strano comportamento, ma riporta anche alcuni problemi più avanzati in cui i casi angolari possono causare errori ritardati.

Il codice sorgente Haskell è disponibile su GitHub!

Abilito anche l’opzione ‘u’ su ogni script bash che scrivo per fare qualche controllo extra:

 set -u 

Questo riporterà l’uso di variabili non inizializzate, come nel seguente script ‘check_init.sh’

 #!/bin/sh set -u message=hello echo $mesage 

Esecuzione dello script:

 $ check_init.sh 

Riferirà quanto segue:

./check_init.sh[4]: mesage: parametro non impostato.

Molto utile per catturare errori di battitura

 sh -n script-name 

Esegui questo. Se ci sono errori di syntax nello script, restituisce lo stesso messaggio di errore. Se non ci sono errori, allora esce senza dare alcun messaggio. Puoi controllare immediatamente usando echo $? , che restituirà 0 confermando il successo senza alcun errore.

Ha funzionato bene per me. Ho eseguito su Linux OS, Bash Shell.

comando nullo [colon] utile anche durante il debug per vedere il valore della variabile

 set -x for i in {1..10}; do let i=i+1 : i=$i done set - 

Controllo effettivamente tutti gli script di bash nella directory corrente per gli errori di syntax SENZA eseguirli utilizzando lo strumento di find :

Esempio:

find . -name '*.sh' -exec bash -n {} \;

Se vuoi usarlo per un singolo file, modifica il carattere jolly con il nome del file.

C’è il plugin BashSupport per IntelliJ IDEA che controlla la syntax.