2016-04-27 67 views
-1

私はAmazon Linuxでbashシェルを使用しています。以下のコードブロックを実行すると、 "予期しないトークン` else 'の構文エラーが発生します。このif-then-elseブロックを正しく書くには、私は何をする必要がありますか?シェルスクリプトの "予期しないトークン` else 'の近くで構文エラーが発生する

+1

BTW、http://shellcheck.net/は、この問題と他の問題の両方を自動的に検出します。 –

+1

さらに、 'fooのようなことをしているのならば、 rc = $?; if [$ rc -eq 0];あなたが '$ rc'を必要としている場合を除いて、そうしないでください。代わりに 'if foo;を実行してください。その後、終了ステータスを取得する必要はありません。 –

答えて

2

(関連するPOSIX仕様にかなり近いです)bashでhelp ifから構文定義を引用すると:

if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi 

if声明、との条件付きの一部に使用される複数のコマンドがある場合もありますコマンドセパレータ(ここではセミコロンで表されます)は、条件付き部分が正常な状態を返す場合は、最後のコマンドと指定されるコマンドのリストの間には必ずとなります。その構文の定義に対して指定されたコードを比較


、このようなセパレータ欠けている:それは、then構文として解析されない、[コマンド引数として渡されているように

if [ $rc -eq 0 ]; then 
#    ^
#    \- this semicolon, or a newline, is mandatory before "then" 

を。

bashとタグ付けされているため、ネイティブ演算構文も使用してください:if ((rc == 0)); thenは読みやすくバグが少ないです)。

+1

変数をどこにでも使用する場合は、二重引用符も使用する必要があります。 '$ rc'が空または設定されていないと、構文エラーが発生します:' if [-eq 0]; –

+0

@VrataBlazek、当然ですが、私はここでOPから厳密にコピー/ペーストしていますが、そのデモンストレーション中に他の点でコードを修正すると、最も直接的な問題についての説明が不明確になります。 –

+0

@VrataBlazek、...これは私がhttp://shellcheck.net/を提案した理由で、バグを以前に質問したコメントに報告します。 –

関連する問題