私はAmazon Linuxでbashシェルを使用しています。以下のコードブロックを実行すると、 "予期しないトークン` else 'の構文エラーが発生します。このif-then-elseブロックを正しく書くには、私は何をする必要がありますか?シェルスクリプトの "予期しないトークン` else 'の近くで構文エラーが発生する
答えて
(関連する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
は読みやすくバグが少ないです)。
変数をどこにでも使用する場合は、二重引用符も使用する必要があります。 '$ rc'が空または設定されていないと、構文エラーが発生します:' if [-eq 0]; –
@VrataBlazek、当然ですが、私はここでOPから厳密にコピー/ペーストしていますが、そのデモンストレーション中に他の点でコードを修正すると、最も直接的な問題についての説明が不明確になります。 –
@VrataBlazek、...これは私がhttp://shellcheck.net/を提案した理由で、バグを以前に質問したコメントに報告します。 –
- 1. 予期しないトークンの近くに構文エラー「し、」
- 2. 予期しないトークンの近くに構文エラー `(」
- 3. トークンの近くで予期しないエラーが発生しました
- 4. -bash:予期しないトークンに近い構文エラー `) '
- 5. bashの?:予期しないトークンの近くに構文エラー `(」 - Pythonの
- 6. 構文エラー:予期しないトークン「 - 」
- 7. 構文エラー:予期しないトークン "
- 8. jQuery構文エラー - 予期しないトークン
- 9. 予期せぬトークン `fi 'の近くに構文エラーがあります
- 10. Javascriptの構文エラーが予期しないトークンが無効
- 11. Drupal 7で解析エラーが発生する:構文エラー、予期しないT_STRING
- 12. 文字列concanination行でこのエラーが発生する構文エラー:予期しない構文エラーT_CONSTANT_ENCAPSED_STRING in
- 13. 予期しないトークン `echo 'の構文エラー
- 14. ANTLR構文エラーの処理方法や、予期しないトークン
- 15. Perlの1つの正規表現の投げ方bash:予期しないトークンの近くの構文エラー `) '
- 16. Safari JS構文エラー:予期しないトークン '='
- 17. cssで予期しないトークンの長さエラーが発生しました。
- 18. Mac OS X(エルキャピタン)のホームブリュー:予期せぬトークンに近い構文エラー{
- 19. PHP構文エラーが予期しない '}'
- 20. トークンの構文エラー ")"、;予想
- 21. Node.jsの構文エラー「予期しないトークン」が「エクスポート」にあります。
- 22. 構文解析エラー:予期しない構文エラーです。
- 23. WebPACKのキャッチされない構文エラー:予期しないトークン<
- 24. 構文解析エラー:予期しない '{'
- 25. 構文エラー、予期しないT_STATIC
- 26. 構文解析エラー:予期しない構文エラー '[' with php 5.3
- 27. 構文エラー:次のコードの5行目で予期しないT_Stringエラーが発生しました。
- 28. 構文エラー、予期しないキーワード
- 29. トラブルシューティング「構文エラー、予期しない 『』」
- 30. 構文エラー、予期しないT_VARIABLE
BTW、http://shellcheck.net/は、この問題と他の問題の両方を自動的に検出します。 –
さらに、 'fooのようなことをしているのならば、 rc = $?; if [$ rc -eq 0];あなたが '$ rc'を必要としている場合を除いて、そうしないでください。代わりに 'if foo;を実行してください。その後、終了ステータスを取得する必要はありません。 –