2010-09-08 24 views
43

是否有任何shell(特別是bash或ksh)檢查程序,用於測試風格,最佳實踐,命名約定等的shell腳本? (類似於Lint for C或Perl :: Critic for Perl。)是否有像Lint或Perl :: Critic for shell腳本這樣的靜態分析工具?

我知道ksh,你可以通過運行ksh -n script.ksh來進行語法檢查,但我希望得到的不僅僅是sytax檢查 - 這是一種解析/分析實際的代碼?

我可能運氣不好,但我想它不會傷害要求。

回答

30

Debian和Ubuntu項目使用腳本checkbashisms,該腳本查找可能表明某人依賴/bin/shbash的特定模式。

除此之外,大部分炮彈有-n選項來分析和報告錯誤。你可以檢查你的腳本對幾種不同的炮彈,以確保它僅使用便攜式語法:

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

編輯添加:既然寫這個答案,shellcheck已被寫入,作爲建議in a later answer。與前面的建議相比,這可以更清晰地查看shell腳本。

+0

酷 - 那個腳本看起來很有希望!從我缺乏發現其他事物和缺乏反應的角度來看,我認爲這可能是唯一可以做這種事情的東西。非常感謝! – BrianH 2010-09-10 18:24:09

+1

是我還是這個選項不在bash和zsh的man page中? – log0 2012-05-24 14:45:07

+1

'bash -n'就像'set -n'。 – fossilet 2012-08-24 16:15:22

37

I found shellcheck:它會檢測中引用你忽視了常見的錯誤和其他的東西(「因爲它的工作原理」)。

+1

這太糟糕了,這取決於Haskell。這很好,但haskell是一個有點巨大的依賴。 – 2013-04-14 02:39:32

+2

@Shurane - 依賴關係僅用於構建,而不是用於運行可執行文件。 – 2013-06-19 08:52:10

+2

看來,唯一的依賴是一個瀏覽器。 – msanford 2014-01-22 20:52:46

7

我寫shlint包提供給Brian的回答呈現彈checkbashims和其他基本掉毛選項。

它可以通過rubygems(gem install shlint)作爲一種堵嘴來安裝,但是您只需要perl(對於checkbashims)和一個符合POSIX的shell來解釋shlint命令本身。應該在OSX和Ubuntu上開箱即用。

相關問題