301

実行せずにbashスクリプトの構文をチェックすることはできますか?

Perl を使用して、実行できますperl -c 'script name'。bash スクリプトに相当するコマンドはありますか?

4

10 に答える 10

425
bash -n scriptname

おそらく明らかな警告: これは構文を検証しますが、bash スクリプトがパスにないコマンドを実行しようとしているかどうかはチェックしませech helloecho hello

于 2008-10-05T12:55:00.523 に答える
144

時間はすべてを変えます。これは、シェル スクリプトのオンライン構文チェックを提供するWeb サイトです。

一般的なエラーの検出が非常に強力であることがわかりました。

ここに画像の説明を入力

ShellCheckについて

ShellCheckは、sh/bash スクリプト用の静的分析およびリンティング ツールです。これは主に、典型的な初心者および中級者レベルの構文エラーと、シェルが不可解なエラー メッセージまたは奇妙な動作を示すだけの落とし穴の処理に焦点を当てていますが、まれなケースが遅延障害を引き起こす可能性があるいくつかのより高度な問題についても報告します。

Haskell のソース コードは GitHub で入手できます。

于 2013-10-24T17:55:18.517 に答える
39

また、追加のチェックを行うために、作成するすべての bash スクリプトで「u」オプションを有効にします。

set -u 

これにより、次のスクリプト「check_init.sh」のように、初期化されていない変数の使用が報告されます。

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

スクリプトの実行:

$ check_init.sh

以下を報告します。

./check_init.sh[4]: メッセージ: パラメータが設定されていません。

タイプミスをキャッチするのに非常に便利

于 2012-05-23T14:10:30.973 に答える
26
sh  -n   script-name 

これを実行します。スクリプトに構文エラーがある場合は、同じエラーメッセージが返されます。エラーがなければ、何のメッセージも出さずに出てきます。を使用してすぐに確認できます。これにより、間違いなく成功の確認echo $?が返されます。0

それは私のためにうまくいきました。Linux OS、BashShellで実行しました。

于 2011-02-02T13:16:05.993 に答える
3

null コマンド [コロン] 変数の値を確認するためにデバッグするときにも役立ちます

set -x
for i in {1..10}; do
    let i=i+1
    : i=$i
done
set - 
于 2014-01-17T10:41:34.497 に答える