Существует ли инструмент статического анализа, такой как Lint или Perl :: Critic для сценариев оболочки? - PullRequest
45 голосов
/ 08 сентября 2010

Существуют ли какие-либо средства проверки оболочки (в частности, bash или ksh), которые тестируют сценарии оболочки на предмет стиля, передовых методов, соглашений об именах и т. Д.?(Что-то вроде Lint для C или Perl :: Critic для Perl.)

Я знаю, что с помощью ksh вы можете выполнять проверку синтаксиса, запустив ksh -n script.ksh, но я надеялся на что-то большее, чем просто проверка синтаксиса - то, чтопарсит / анализирует реальный код?

Возможно, мне не повезло, но я полагаю, это не помешает спросить.

Ответы [ 3 ]

41 голосов
/ 04 февраля 2013

Я нашел shellcheck : он проверяет наличие распространенных ошибок в цитировании и других вещей, которые вы пропускаете («потому что это работает»).

32 голосов
/ 09 сентября 2010

В проектах Debian и Ubuntu используется скрипт checkbashisms, который ищет конкретные шаблоны, которые могут указывать на то, что кто-то полагается на /bin/sh, являющийся bash.

Помимо этогоБольшинство оболочек имеют опцию -n для анализа и сообщения об ошибках.Вы можете проверить свой скрипт по нескольким различным оболочкам, чтобы убедиться, что он использует только переносимый синтаксис:

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

изменить, чтобы добавить : с момента написания этого ответа shellcheck было написано, как предложено в более позднем ответе .Это делает намного более тщательную работу по написанию сценариев оболочки, чем предыдущие предложения.

7 голосов
/ 28 мая 2013

Я написал shlint , чтобы обернуть checkbashims и другие основные параметры линтинга, доступные для оболочек, представленные в ответе Брайана.

Его можно установить с помощью rubygems (gem install shlint), что-то вроде кляпа, на самом деле, но вам нужен только perl (для checkbashims) и POSIX-совместимая оболочка для интерпретации самой команды shlint. Должно работать из коробки на OSX и Ubuntu.

...