Как проверить синтаксис скрипта Bash без его запуска?



можно ли проверить синтаксис скрипта bash без его выполнения?



используя Perl, я могу запустить perl -c 'script name'. Есть ли эквивалентная команда для сценариев bash?

845   7  

7 ответов:

bash -n scriptname

возможно, очевидное предостережение: это проверяет синтаксис, но не проверяет, пытается ли ваш скрипт bash выполнить команду, которая не находится на вашем пути, например ech hello вместо echo hello.

время все меняет. вот сайт, которые обеспечивают онлайн-проверка синтаксиса для скрипта.

Я обнаружил, что это очень мощный обнаружения распространенных ошибок.

enter image description here

О ShellCheck

ShellCheck статический анализ и инструмент анализа для SH/bash скриптах. Он в основном сосредоточен на обработке типичных синтаксических ошибок начального и среднего уровня и ловушек, где оболочка просто дает загадочный сообщение об ошибке или странное поведение, но он также сообщает о нескольких более сложных проблемах, где угловые случаи могут вызвать задержки сбоев.

исходный код Haskell доступен на GitHub!

Я также включаю опцию ' u ' на каждом скрипте bash, который я пишу, чтобы сделать дополнительную проверку:

set -u 

это сообщит об использовании неинициализированных переменных, как в следующем скрипте 'check_init.sh'

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

выполняется скрипт :

$ check_init.sh

сообщит следующее:

./check_init.sh[4]: mesage: параметр не задан.

очень полезно, чтобы поймать опечатки

sh  -n   script-name 

запустить. Если есть какие-либо синтаксические ошибки в скрипте, то он возвращает то же сообщение об ошибке. Если нет ошибок, то он выходит, не давая никакого сообщения. Вы можете проверить сразу с помощью echo $?, что вернет 0 об успешной без каких-либо ошибок.

это сработало для меня хорошо. Я работал на Linux OS, Bash Shell.

null команда [двоеточие] также полезно при отладке, чтобы увидеть значение переменной

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

Я на самом деле проверяю все скрипты bash в текущем dir на синтаксические ошибки без их запуска с помощью :

пример:

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

Если вы хотите использовать его на один файл, просто изменить шаблон имени файла.

здесь плагин BashSupport на IntelliJ IDEA который проверяет синтаксис.

Comments

    Ничего не найдено.