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

シェルスクリプトでヒアドキュメントを使用する方法

ヒアドキュメント( Heredoc )は、特別なコードブロックとして扱われる入力またはファイルストリームリテラルです。このコードブロックは、処理のためにコマンドに渡されます。 ヒアドキュメント UNIXに由来 シェルであり、sh、tcsh、ksh、bash、zsh、cshなどの一般的なLinuxシェルで見つけることができます。特に、Perl、Ruby、PHPなどの他のプログラミング言語もヒアドキュメントをサポートしています。

ヘルドックの構造

ヒアドキュメント 2つの山かっこを使用(<<) その後に区切り文字トークンが続きます 。同じ区切り文字トークンを使用して、コードのブロックを終了します。区切り文字内にあるものはすべて、コードのブロックと見なされます。

以下の例を見てください。コードのブロックをcatコマンドにリダイレクトしています。ここでは、区切り文字は「ブロック」に設定されています 」と同じ「ブロック」で終了します 「。

cat << BLOCK
	Hello world
	Today date is $(date +%F)
	My home directory = ${HOME}
BLOCK

:ブロックを開始および終了するには、同じ区切り文字トークンを使用する必要があります。

複数行のコメントを作成する

現在bashでコーディングしている場合、bashはデフォルトで Cのような複数行のコメントをサポートしていないことをご存知かもしれません。 またはJavaヒアドキュメントを使用できます これを克服するために。

これは、複数行のコメントをサポートするbashの組み込み機能ではなく、単なるハックです。 ヒアドキュメントをリダイレクトしない場合 どのコマンドに対しても、インタプリタはコードのブロックを読み取るだけで、何も実行しません。

<< COMMENT
	This is comment line 1
	This is comment line 2
	This is comment line 3
COMMENT
シェルスクリプトでヒアドキュメントを使用する方法

空白の処理

デフォルトでは、ヒアドキュメント 空白文字(タブ、スペース)は抑制されません。 dash (-)を追加することで、この動作をオーバーライドできます (<<)の後 区切り文字が続きます。これにより、すべてのタブスペースが抑制されますが、空白は抑制されません。

cat <<- BLOCK
This line has no whitespace.
  This line has 2 white spaces at the beginning.
    This line has a single tab.
        This line has 2 tabs.
            This line has 3 tabs.
BLOCK
シェルスクリプトでヒアドキュメントを使用する方法

変数とコマンドの置換

ヒアドキュメントは変数置換を受け入れます。変数は、ユーザー定義変数または環境変数にすることができます。

TODAY=$(date +%F)
	
cat << BLOCK1
# User defined variables
Today date is = ${TODAY}
#Environ Variables
I am running as = ${USER}
My home dir is = ${HOME}
I am using ${SHELL} as my shell
BLOCK1

同様に、ヒアドキュメント内で任意のコマンドを実行できます コードブロック。

cat << BLOCK2
$(uname -a) 
BLOCK2
シェルスクリプトでヒアドキュメントを使用する方法 シェルスクリプトでヒアドキュメントを使用する方法

特殊文字のエスケープ

特殊文字をエスケープする方法はいくつかあります。キャラクターレベルまたはドキュメントレベルのどちらでも実行できます。

個々の特殊文字をエスケープするには、円記号(\)を使用します 。

cat << BLOCK4
$(uname -a)
BLOCK4

cat << BLOCK5
Today date is = ${TODAY}
BLOCK5

ブロック内のすべての特殊文字をエスケープするには、区切り文字を一重引用符、二重引用符で囲むか、区切り文字の前に円記号を付けます。

cat << 'BLOCK1'
I am running as = ${USER}
BLOCK1

cat << "BLOCK2"
I am running as = ${USER}
BLOCK2

cat << \BLOCK3
I am running as = ${USER}
BLOCK3
> シェルスクリプトでヒアドキュメントを使用する方法

これで、ヒアドキュメントの構造がわかりました。 そしてそれがどのように機能するか、いくつかの例を見てみましょう。 ヒアドキュメントを使用する2つの一般的な領域 SSHを介してコマンドのブロックを実行し、ヒアドキュメントを介してSQLクエリを渡します 。

以下の例では、SSHを介してリモートサーバーでコードのブロックを実行しようとしています。

シェルスクリプトでヒアドキュメントを使用する方法

以下の例では、選択を渡します psqlへのステートメント データベースに接続してクエリを実行します。これは、 psqlでクエリを実行する別の方法です。 -fを使用する代わりにbashスクリプト内 .sqlを実行するためのフラグ ファイル。

#!/usr/bin/env bash

UNAME=postgres
DBNAME=testing

psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK
SELECT * FROM COUNTRIES
WHERE region_id = 4;
BLOCK
シェルスクリプトでヒアドキュメントを使用する方法

この記事は以上です。 ヒアドキュメントでできることは他にもたくさんあります 例で示したものと比較して。 ヒアドキュメントで役立つハックがある場合 読者がその恩恵を受けることができるように、コメントセクションに投稿してください。


  1. Google ファミリー リンクを使用してアプリをブロックする方法

    進化するテクノロジーと変化するトレンドの中で、追いつくのは非常に困難です。家に子供がいる場合、親は特に注意する必要があります。テクノロジーは日進月歩で進化し、私たちのライフスタイルも変化しています。スマートフォンの普及と豊富なアプリにより、子供の活動を追跡することは不可能になりつつあります。親はしばしば、子供のあらゆる動きを監視しようとします。しかし、両親がともに働いているため、24 時間年中無休で子供たちを監視することはできません。そんな時こそ、それを支援するアプリやサービスが必要です。 Google にはそのためのソリューションがあります。 Google ファミリー リンクを使用すると、

  2. Windows 10 で SSH セキュア シェルを使用するには?

    コンピュータをリモート デスクトップまたはネットワーク経由で接続してデータを共有する場合は、Secure Shell が必要です。このブログでは、Windows 10 で SSH セキュア シェルを使用する方法を学習します。SSH セキュア シェルは、デバイスとインターネットを含む任意のネットワーク間の通信システムと見なすことができます。このシステムは暗号化されており、ハッカーやその他のスパイウェア、アドウェア、マルウェアが、ユーザーがアクセスしたりデータを受信したりしているサイトや場所に関する詳細を取得できないため、安全です。 Linux オペレーティング システムは Windows よりも