Esiste uno strumento di analisi statico come Lint o Perl :: Critic per gli script di shell?

Esistono controlli di shell (in particolare bash o ksh) che testano gli script di shell per stile, best practice, convenzioni di denominazione, ecc.? (Qualcosa come Lint for C, o Perl :: Critic for Perl.)

So che con ksh puoi eseguire il controllo della syntax eseguendo ksh -n script.ksh ma speravo in qualcosa di più del semplice controllo dei sytax – qualcosa che analizza / analizza il codice reale?

Probabilmente sono sfortunato, ma immagino che non faccia male a chiederlo.

I progetti Debian e Ubuntu usano uno script checkbashisms , che cerca pattern particolari che potrebbero indicare che qualcuno si sta basando su /bin/sh bash .

Oltre a ciò, la maggior parte delle shell ha un’opzione -n per analizzare e riportare errori. Puoi controllare il tuo script su diversi shell per assicurarti che usi solo la syntax portatile:

 for shell in zsh ksh bash dash sh do echo "Testing ${shell}" ${shell} -n my_script.sh done 

modifica da aggiungere : Da quando ho scritto questa risposta, è stato scritto shellcheck , come suggerito in una risposta successiva . Questo fa un lavoro molto più approfondito di linting degli script di shell rispetto ai suggerimenti precedenti.

Ho trovato shellcheck : verifica errori comuni nelle quotazioni e altre cose che trascuri (“perché funziona”).

Ho scritto shlint per incapsulare checkbashims e le altre opzioni di base per lo sfilacciamento disponibili per le shell presentate nella risposta di Brian.

È installabile tramite rubygems ( gem install shlint ) come una sorta di gag, in realtà, ma è necessario solo perl (per i checkbashims) e una shell conforms a POSIX per interpretare il comando shlint stesso. Dovrebbe funzionare senza problemi su OSX e Ubuntu.