Jak mohu syntaxe zkontrolovat Bash skript, aniž by hrozilo, že?

hlasů
204

Je možné zkontrolovat syntaxi bash skript, aniž by spuštěním?

Použití Perl, můžu běžet perl -c 'script name'. Je nějaká ekvivalentní příkaz pro bash skriptů?

Položena 05/10/2008 v 13:51
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
294

bash -n scriptname

Snad jasné varování: tento ověřuje syntaxi, ale nebude zjistit, zda váš bash skript se pokusí provést příkaz, který není v cestě, stejně jako ech hellomísto echo hello.

Odpovězeno 05/10/2008 v 13:55
zdroj uživatelem

hlasů
85

Čas všechno změní. Zde je webová stránka , která poskytuje on-line kontrolu syntaxe pro shell skript.

Zjistil jsem, že je to velmi silný zjišťování běžné chyby.

zadejte popis obrázku zde

o ShellCheck

ShellCheck je statická analýza a cupování nástroj pro sh / bash skriptů. Je zaměřen na řešení typických začátečníky i syntaktické chyby středně pokročilé úrovni a úskalí, kde shell prostě dává mystické chybová zpráva nebo podivné chování, ale také zprávy o několik pokročilejších problémech, kde rohové případy mohou způsobit zpoždění selhání.

Haskell zdrojový kód je k dispozici na GitHub!

Odpovězeno 24/10/2013 v 18:55
zdroj uživatelem

hlasů
36

Také jsem povolit ‚u‘ možnost na každém bash skript jsem psát, aby se dělat nějaké extra kontrolu:

set -u 

To bude hlásit použití neinicializované proměnné, jako v následujícím skriptu ‚check_init.sh‘

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

Spuštění skriptu:

$ check_init.sh

Ohlásí následující:

./check_init.sh[4]: mesage: Parametr není nastaven.

Velmi užitečné chytit překlepy

Odpovězeno 23/05/2012 v 15:10
zdroj uživatelem

hlasů
22
sh  -n   script-name 

Spustit tento. Pokud se vyskytnou nějaké chyby syntaxe ve skriptu, pak se vrátí stejná chybová zpráva. Pokud nejsou žádné chyby, pak to vyjde bez udání zprávu. Můžete okamžitě zjistit pomocí echo $?, která se vrátí 0potvrzující úspěšné bez jediné chybičky.

Podařilo se mi dobře. Běžel jsem na OS Linux, Bash Shell.

Odpovězeno 02/02/2011 v 14:16
zdroj uživatelem

hlasů
3

null příkaz [tlustého střeva] také užitečné při ladění vidět hodnoty proměnné

set -x
for i in {1..10}; do
    let i=i+1
    : i=$i
done
set - 
Odpovězeno 17/01/2014 v 11:41
zdroj uživatelem

hlasů
2

Vlastně jsem zkontrolovat všechny bash skripty v současné dir na syntaktické chyby, aniž by hrozilo jejich použití findnástroje:

Příklad:

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

Chcete-li ji použít pro jediný soubor, stačí upravit zástupný znak s názvem souboru.

Odpovězeno 03/08/2017 v 11:58
zdroj uživatelem

hlasů
1

Tam je BashSupport plugin pro IntelliJ IDEA , která kontroluje syntaxi.

Odpovězeno 05/12/2015 v 18:17
zdroj uživatelem

hlasů
0

Potřebujete-li v proměnné platnost všech souborů v adresáři (git pre-commit, stavět hladkým skript), můžete chytit výstup stderr z „sh -n“ nebo „bash n“ příkazy (viz další odpovědí) v proměnné, a mají „if / else“ na základě toho

bashErrLines=$(find bin/ -type f -name '*.sh' -exec sh -n {} \;  2>&1 > /dev/null)
  if [ "$bashErrLines" != "" ]; then 
   # at least one sh file in the bin dir has a syntax error
   echo $bashErrLines; 
   exit; 
  fi

Change „sh“ s „bash“ v závislosti na vašich potřebách

Odpovězeno 16/07/2019 v 12:17
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more