BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

BashおよびLinuxシェルのHEREDOC(ヒアドキュメント)–チュートリアル

この記事では、ヒアドキュメント(ヒアドキュメント)の使用方法を説明します。 )複数行のテキストを処理するためのBash/Shellスクリプト。

ヒアドキュメントは、複数行の入力を受け入れるのに最も役立ちます。ユーザーは、テキストの行を入力し、Enterキーを押してから、次の行を入力することができます。スクリプトで複数行のテキストを定義するためにも使用できます。

また、複数のコマンドをインタラクティブプログラムに送信することもできます。これについては、後の例で説明します。

この記事の例は、BashシェルとZshシェルの両方で機能します。

標準の入力、配管、およびリダイレクト

ヒアドキュメントは通常、標準の入力/出力およびリダイレクト/パイピングとともに使用され、処理、フォーマット、または表示のために複数行のテキストを他のコマンドに送信します。このトピックには、概念を説明するための記事が本当に必要なので、ここにあります:

Linux / Bashでstdin、stdout、stderrを例を使用してリダイレクトします

以下の例では、上記の記事で取り上げた概念と方法をいくつかの点で使用します。

Bash/Zshヒアドキュメント構文

ヒアドキュメントを開始するには 、 <<を使用するだけです 指図。これは、上記で概説した入力/出力リダイレクトの形式です。

ヒアドキュメントを使用するための構文 は次のとおりです:

COMMAND <<LIMITSTRING
text line 1
text line 2
...
LIMITSTRING

注:

  • コマンド Linuxの任意のコマンドまたはスクリプトを使用できます。ヒアドキュメントに含まれるテキストの内容は、リダイレクトを使用して送信されます。
  • << ヒアドキュメントステートメントの開始を定義します
    • 複数行のテキストをインデントする場合は、<<-を使用します (ダッシュが追加されていることに注意してください)代わりに–各行から先頭のタブを削除します
  • LIMITSTRING ヒアドキュメントのテキスト入力を終了するために入力する必要のある文字列です
    • ヒアドキュメントは複数行であるため、ユーザーがEnterキーを押して次の行に移動するため、Enterキーを押して新しいテキストの入力を停止することはできません。
    • LIMITSTRING 、外観上、テキストの入力と終了が完了したことをヒアドキュメントに通知します
    • 何でもかまいません –テキストに表示する必要のない一連の文字を使用して、テキストが途中で終了しないようにしてください。
    • 一般的な方法は、テキスト EOFを使用することです。 ( Eの略 nd O f F ile) LIMITSTRING として –このテキストがヒアドキュメント内に表示されない限り。
  • テキストは何行でも構いません

ヒアドキュメントの例

複数行のテキスト入力の受け入れ

この例では、複数行のテキストを受け入れて、それらを catに送信します。 表示用コマンド:

cat <<EOF
This is line 1
This is line 2
EOF

上記の例をターミナルプログラムに入力する必要があります。

変数の使用

ヒアドキュメントでシェル変数を使用できます:

cat <<EOF
This is line 1
This is line 2
Your current directory is $PWD
EOF

上記の$PWD変数は、ヒアドキュメントの1行に表示されています。この変数は、現在の作業ディレクトリの値を保持しています。

ヒアドキュメントの出力のリダイレクト

標準のリダイレクト(これが何であるかわからない場合は、記事の前半を参照)を使用して、コマンドに送信された後、ヒアドキュメントのコンテンツを別のプログラムまたはファイルに送信できます。

cat <<EOF > output.txt
This is line 1
This is line 2
Your current directory is $PWD
EOF

上記、 ヒアドキュメントの内容とcatの出力を読み取ります リダイレクトされ、ファイルに書き込まれます output.txt >を使用する コマンド。

スクリプトでの複数行テキストの定義

スクリプトでヒアドキュメントを使用できます。シェルスクリプトは、シェルに入力される行ごとのコマンドのリストにすぎないため、同じように動作します。

スクリプトコードをインデントできるのは便利です。これらのタブをテキストに表示したくない場合は、を追加できます。 (ダッシュ)ヒアドキュメント宣言に移動して、各行の先頭から空白を削除します:

#!/bin/bash

if $trueOrFalse; then
    cat <<-EOF > output.txt
    This is line 1
    This is line 2
    Your current directory is $PWD
    EOF
fi

#!/bin/bash

ヒアドキュメントを変数に割り当てる

ヒアドキュメントの複数行のテキストをcatで読み取ることにより、スクリプト変数に割り当てることができます。 コマンドを実行し、次のような変数に出力を割り当てます。

mytext=$(cat <<-EOF 
    This is line 1
    This is line 2
    Your current directory is $PWD
    EOF
)

echo $mytext

インタラクティブプログラムへの複数のコマンドの送信

ヒアドキュメントは、複数行のテキストをインタラクティブプログラムに送信することもできます。一部のプログラムは、起動すると、独自のコマンドを入力することを期待します。処理用のテキストを受け入れたり、コマンドを発行するための独自のシェルを提供したりする場合があります。

この一例はMySQLです。MySQLが起動してサーバーに接続したら、独自のコマンドを入力してからEnterキーを押してデータをクエリできます。ヒアドキュメントを使用すると、これらのコマンドを事前に作成して、ユーザーの操作なしでMySQLに送信できます。

mysql -uUSERNAME -pPASSWORD DATABASE <<EOF
SHOW TABLES;
SELECT * FROM posts;
EOF

上記のMySQL コマンドは、USERNAMEとPASSWORDを使用して特定のデータベースに接続するために使用されます。

接続の準備が整うと、2つの連続したコマンドが発行されます。1つはテーブルを表示 1つは選択 投稿のすべてのレコード テーブル。


  1. Bash 変数チュートリアル – 6 つの実用的な Bash グローバル変数とローカル変数の例

    この記事は、進行中の bash チュートリアル シリーズの一部です。他のプログラミング言語と同様に、Bash にも変数が用意されています。 Bash 変数は、プログラムの存続期間中に必要となる情報を一時的に格納します。構文: VARNAME=VALUE 注: 変数の割り当てでは、「=」記号の周りにスペースを入れないでください。 VAR=VALUE を使用すると、シェルは「=」を記号として認識し、コマンドを変数割り当てとして扱います。 VAR =VALUE を使用すると、シェルは VAR がコマンドの名前であると想定し、それを実行しようとします。 シェルは変数の型を気にしません。変数には、

  2. 5 つの実用的な例を含む Bash スクリプト入門チュートリアル

    進行中の Unix Sed および Unix Awk シリーズと同様に、Bash スクリプトに関するいくつかの記事を投稿します。実用的な例ですべての bash スクリプト テクニックをカバーします。 シェルは、ユーザー コマンドを解釈するプログラムです。コマンドは、ユーザーが直接入力するか、シェル スクリプトと呼ばれるファイルから読み取るかのいずれかです。ユーザーからの入力を直接読み取る場合、シェルは対話型シェルとして呼び出されます。 シェルは、ファイルからコマンドを読み取って実行するときに、非対話型シェルとして呼び出されます。この場合、シェルはスクリプト ファイルの各行を上から下に読み取