予期しないトークンの近くのBash構文エラーを修正
公開: 2022-05-30Linux Bashターミナルでのコーディングは、コーディング部門で主流となっています。 コーディング言語を学ぶソフトウェアエンジニアと学生は、さまざまなエラーに遭遇します。 予期しないトークンの近くの構文エラー'('または予期しないトークンの近くのBash構文エラーなどのエラーを繰り返し見た場合は、記事に記載されている方法に頼って、熟練したコーダーになることができます。説明されている順序で、ファイルのコマンドラインのエラーを修正します。
コンテンツ
- 予期しないトークンの近くでBash構文エラーを修正する方法
- 方法1:各コマンドラインのエラーを手動で修正する
- ステップI:ファイルの内容を読む
- ステップII:Windowsの改行を削除する
- ステップIII:新しく作成されたファイルにアクセス許可を設定する
- ステップIV:ファイル内のコードをフォーマットする
- 方法2:コードを書き直す
- 方法3:Dos2unix.exeコマンドを使用する
予期しないトークンの近くでBash構文エラーを修正する方法
Linux Bashは、Linuxベースのシステムのコマンドラインインタープリターであり、BourneShellまたはshの代わりになります。 ファイルには、LinuxBashスクリプトで.sh形式を使用して名前が付けられます。 シェルスクリプトのコードにフォーマットの問題がある場合は、構文エラーが発生する可能性があります。 エラーが(文字に近い場合、シェルはその行にエラーを表示し、対応する行にエラーを表示します。LinuxBashはインタープリターであるため、エラーのある行はで返されます。ターミナルとそれはスクリプト内の残りのコマンドのスキャンを停止します。したがって、特定のコマンドラインのエラーを修正し、次の手順に進んでシェルスクリプトの予期しないトークンエラーを修正する必要があります。構文の原因Linux Bashの予期しないトークンの近くのエラーは、このセクションの以下のようにリストされています。
- エスケープシーケンスを使用したコーディング-Bashスクリプトでコードを記述した場合、エスケープシーケンスまたはスクリプト内の引用符によってエラーが発生する可能性があります。 エラーを修正するには、エスケープシーケンスと引用符を正しい形式で記述する必要があります。
- コーディングファイルの構文が正しくない-ループの順序を変更するなど、コマンドが間違った構文で記述されている場合、コードの構文で構文エラーが発生する可能性があります。
- コマンドの誤った使用法-値の割り当てが正しくないなど、コマンドを正しく使用していない場合は、構文エラーが発生する可能性があります。
- システム内の互換性のないOS-コーディングスクリプトのシェルがUnixシステムとDOSシステム間で互換性がない場合、予期しないエラーが発生する可能性があります。
- bashシェルスクリプトの問題-別のシステムからコピーされたファイルのbashシェルスクリプトで実行されている問題により、予期しないトークンエラーが発生する場合があります。
説明のために、次のコマンドラインを使用してLinuxBashスクリプトで作成されたexample.shという名前のファイルについて考えてみます。 サンプルファイルには構文エラーの可能性があり、シェルスクリプトで使用できるすべての可能なコマンドが含まれています。
str ='スクリプトの'(サンプルファイル)'の最初のコマンドライン' str = [(1,2)、(3,4)] if [$ day ==“ mon”] then エコー「モン」 そうしないと エコー「月なし」 fi {0..2}のVARIABLEの場合; それから エコーコマンド1を実行します。 エコーコマンド2; エコーコマンド3; エコーコマンド4; 終わり 真実である間; if [$ day ==“ mon”]; 次に「mon」をエコーします。 それ以外の場合は「月ではない」とエコーします。 終わり; fi
方法1:各コマンドラインのエラーを手動で修正する
エラーを修正する最初の方法は、スクリプトの各コマンドラインで構文エラーを手動で修正することです。 このセクションでは、コマンドラインで予期しないトークンの近くにある構文エラーを解決する手順について説明します。 ターミナルで予期しないトークンエラーを修正するプロセスを以下に説明します。 ./example.shコマンドを入力し、 Enterキーを押して、ターミナルでファイルを実行します。
2.以下の結果のコマンドラインで予期しないトークンエラーが発生している行に注意してください。
3.以下で説明する方法を個別に実行し、ファイルを保存して、各行のエラーを修正します。
4.変更後にファイルを再度実行し、ファイルで構文エラーが解決されているかどうかを確認します。
また読む: Windows10にLinuxBashシェルをインストールする方法
ステップI:ファイルの内容を読む
コマンドラインの構文エラーを解決するための最初のステップは、ターミナルでファイルを読み取ることです。 ファイルに問題がある場合は、ファイルを表示できない場合があります。 ファイルを表示する通常の方法は、コマンド./example.shを使用してファイルを実行することですが、ファイルの内容を変更することはできません。 ファイルの内容を表示し、コマンドラインを変更して予期しないトークン'('の近くの構文エラーを修正するオプションについては、以下で説明します。
オプション1:CATコマンドを使用
最初のオプションは、 catコマンドを使用してシェルスクリプトでファイルを表示することです。 ターミナルでコマンドcat–v example.shと入力して、catコマンドを使用し、予期しないトークンエラーが発生したファイルの内容を読み取ります。
注1: example.shは説明の目的で使用されており、予期しないトークンエラーが発生したファイルの名前を入力する必要があります。
注2: cat –vコマンドは、キャリッジリターンまたはノーブレークスペースを表す可能性のあるすべての非表示文字を表示するために使用されます。
オプション2:VXコマンドを使用
catコマンドを使用できない場合は、vxコマンドを使用して、以下の手順を使用してファイルのコマンドを表示および変更してみてください。 ターミナルでsh–vx ./example.shコマンドを入力して、ファイルを開きます。
オプション3:od –aコマンドを使用
3.コマンドラインに非表示の文字がいくつかある場合は、od –aコマンドを使用してファイルを表示できます。 ファイルの内容がコードファイルに表示されていない場合は、コマンドod –aexample.shを使用してファイルを読み取ってコードを変更してみてください。
ステップII:Windowsの改行を削除する
シェルスクリプトにWindowsの改行がある場合は、コンソールコマンドを使用して改行を削除し、コード行を新しいファイルにコピーしてエラーを修正できます。
ターミナルで次のコマンドを入力して、ファイルの内容をcorrectedexample.shという名前の別のファイルに保存し、スクリプトのWindowsの改行を削除します。
tr –d'\ r'<example.sh>correctedexample.sh
ステップIII:新しく作成されたファイルにアクセス許可を設定する
シェルでファイルを実行できるように、ファイルを編集するには、新しく作成したファイルに権限を設定する必要があります。 ターミナルでコマンドをchmod755correctedexample.shと入力して、ファイルへのアクセス許可を提供し、ファイルを実行します。 これで、修正されたファイルを表示してフォーマットの問題を修正し、ファイル内の予期しないトークン'('の近くの構文エラーを修正できます。
ステップIV:ファイル内のコードをフォーマットする
2番目のステップは、コード行を個別にフォーマットし、ファイルのコマンドラインを手動で変更することです。 予期しないトークン'('の近くの構文エラーを修正するためにファイルをフォーマットするオプションについては、このセクションで以下で説明します。
オプション1:一重引用符を二重引用符に置き換えます
コマンドラインで一重引用符を使用している場合は、一重引用符を二重引用符に置き換えてコマンドを変更し、構文エラーを修正する必要があります。 example.shファイルで、コマンド内の「および」または一重引用符を含むコード行を削除し、一重引用符を二重引用符または「および」に置き換えます。 ここで、サンプルファイルでは、コードをstr =「スクリプトの「\(サンプルファイル)\」の最初のコマンドライン」として変更する必要があります。
注: str =“ [(1,2)、(3,4)]”などのパラメーター・タイプのコマンドには、二重引用符が必要です。
また読む: 2022年の20のベスト軽量Linuxディストリビューション
オプション2:文字列行に$を追加する
スクリプトに文字列値を追加した場合は、文字列値に$を追加して、スクリプトの構文エラーを修正する必要があります。 予期しないエラーを修正するには、文字列値を使用してコマンドラインに$を追加します。 ここで、サンプルファイルで、コマンドラインを次のように変更します。
str = $'スクリプトの'\(サンプルファイル)\'の最初のコマンドライン'
注:文字列値に$を使用している場合、コマンドラインはANSI C標準によってデコードされるため、バックスラッシュエスケープシーケンスをバイパスできます。 つまり、文字列値に$を使用することで、コマンドラインで一重引用符の代わりに二重引用符を使用することを回避できます。
オプション3:タブをスペースに変換する
スクリプトの構文エラーを修正するには、コマンドの2つのステートメントの間に残したスペースをタブではなくスペースにする必要があります。 Cygwinでエラーが発生した場合は、コード内のタブをスペースに変換してエラーを修正してみてください。 コマンドラインを以下に示します。
エコーコマンド1を実行します。 エコーコマンド2; エコーコマンド3; エコーコマンド4; 終わり
エラーを修正するには、上記のコマンドを次のように書き直す必要があります。
エコーコマンド1を実行します。 エコーコマンド2; エコーコマンド3; エコーコマンド4; 終わり
オプション4:エスケープ文字を使用する
bash文字を使用している場合は、構文エラーを修正するために、bash文字とともにエスケープ文字を使用することが重要です。 括弧または()はファイル内のbash特殊文字であるため、コマンドを実行するには、コマンドラインでエスケープ文字またはバックスラッシュを使用して通常の文字をエスケープする必要があります。 str ='スクリプト'コマンドの\'(サンプルファイル)\'の最初のコマンドラインでは、エスケープ文字が使用されているため、ターミナルでエラーが発生することはありません。
また読む: Linuxで私たちの中に入る方法
オプション5:文字間にスペースを使用する
シェルスクリプトは、スクリプト内のコマンドとステートメントをデフォルト値で認識します。 シェルがスクリプトで指定されたコマンドを識別できるように、文字間のスペースが適切に使用されていることを確認する必要があります。 スペースは、コマンドラインで2つの文字を区別するために使用される文字です。 コードでは、 ifと[の間にスペースがありません。これにより、 if [コマンドがシェルによって識別されないため、予期しないトークンエラーが発生します。 コードがif[$day ==“ mon”];に変更された場合シェルによって識別された場合、エラーはシェル速報コマンドとして解決できます。
オプション6:ステートメントにコマンドセパレータを使用する
ターミナルが個々のコマンドを識別するために、シェルスクリプトのさまざまなコマンドをステートメントに分割する必要があります。 Linux Bashの構文エラーを修正するには、コマンドセパレーターを使用する必要があります。 コマンド内のステートメントは、セミコロンや;などのコマンド区切り文字で区切る必要があります。 または、 Enterキーを押して新しい行を入力します。 たとえば、コード内のコマンドif [$ day ==“ mon”]は、[$ day ==“ mon”];のように変更する必要があります。 次に、エラーを修正します。 セミコロンは文字[とその後のコマンド区切り文字として使用されるため、このエラーを修正できます。
オプション7:追加のステートメントを削除する
場合によっては、ステートメントを追加したり、ネストされたループが複数ある場合にコードを混同したりすることがあります。 Linux Bashの予期しないトークン'('の近くの構文エラーを修正するには、コマンドラインの追加ステートメントを削除する必要があります。bashループは…doneまたは…fiが正しい構文である必要がある場合は構文構造です。サンプルファイルのforループの構文が間違っています。ifステートメントで使用されている用語thenがあります。次のコードとしてコードを変更すると、予期しないトークンエラーが修正されます。このステートメントは、コード内の追加のステートメントであり、用語を削除します。エラーを修正します。
{0..2}のVARIABLEの場合; エコーコマンド1を実行します。 エコーコマンド2; エコーコマンド3; エコーコマンド4; 終わり
オプション8:ステートメントの終了順序が正しいことを確認する
シェルスクリプトで多くのネストされた、または条件付きの構成ステートメントを使用している場合は、ループが開いている順序でループが閉じていることを確認する必要があります。 新しい行区切り文字を使用して、ループとの競合を回避できます。 ネストされたループと条件ステートメントを閉じる順序は正しくなければならず、変更してはなりません。 trueの間、コード内のループ。 if [$ day ==“ mon”]; 次に「mon」をエコーします。 それ以外の場合は「月ではない」とエコーします。 終わり; fiは正しい順序で閉じる必要があります。 以下に示すようにコードを変更すると、ステートメントを閉じる順序が修正されるため、予期しないトークンエラーを修正できます。
真実である間; if [$ day ==“ mon”]; 次に「mon」をエコーします。 それ以外の場合は「月ではない」とエコーします。 fi; 終わり
また読む:コマンドラインインタプリタとは何ですか?
方法2:コードを書き直す
コードをコピーしてターミナルの新しいファイルに貼り付けた場合は、コードを手動で書き直してエラーを修正してみてください。 シェルスクリプトでフォーマットエラーなしでコードを記述した場合、コードのエラーを修正できます。 これは、Microsoft Wordなどのテキストエディタの非表示の文字とフォーマットの問題により、コードをコピーして貼り付けるために使用した可能性があり、エラーが発生した可能性があるためです。
方法3:Dos2unix.exeコマンドを使用する
Unixオペレーティングシステムを使用している場合は、改行文字を\ nとしてコードを記述して、ファイル内の次の行に移動できます。 ただし、Windows OSを使用している場合は、キャリッジリターンとラインフィード、またはファイルの\ r \ nを使用して、コードの次の行に移動する必要があります。 CygwinのWindowsOSで記述されたコードを実行すると、予期しないトークン'('の近くで構文エラーが発生する場合があります。
エラーを修正するには、 DOSからUnixへのコマンドラインツールをテキストファイル形式のコンバーターとして使用して、キャリッジリターン文字をクリアする必要があります。 ターミナルでdos2unix.exeexample.shとして次のコマンドを入力すると、ファイルをUnix形式に変換できます。
おすすめされた:
- Androidでテレグラムアカウントを作成する方法
- Windows10のランタイムエラーC++を修正
- Githubアカウントを完全に削除する方法
- Linux用のトップ14ベストグラフィックカード
この記事では、スクリプト内の予期しないトークン'('の近くでBash構文エラーを修正する基本的な方法について説明しました。LinuxBashを使用している場合は、このセクションで説明する方法を使用して、予期しないトークンの近くでBash構文エラーを修正できます。記事全体を読み、内容が役立つことがわかった場合は、コメントセクションで提案や質問をお知らせください。