Bashスクリプト内から、YAMLやHTMLなどの複雑なネストされた構造を持つ複数行のドキュメントを生成する必要がある場合があります。これは、ヒアドキュメントなどの特別なBash機能を使用して実現できます。 。 「ヒアドキュメント」は、スクリプトまたはインタラクティブプログラムにリダイレクトできるコードまたはテキストブロックです。基本的に、Bashスクリプトは、別のコマンド、スクリプト、またはインタラクティブプログラムにリダイレクトすると、ヒアドキュメントになります。
この記事では、次の方法について説明します。
- 配列、辞書、カウンターを使用する
- さまざまな種類のコメントを処理する
- YAMLおよびHTMLドキュメントを生成する
- テキストと添付ファイルを含むメールを送信する
[今すぐダウンロード:Bashスクリプトのシステム管理者ガイド。 ]
スクリプトの文書化
スクリプトにコメントを付けることが重要です。#
を使用して1行のコメントを作成できます。 、または:
の組み合わせを使用して、複数行のコメントを付けることができます および<
例:
#これは単純なコメントです:<
スクリプトのこのヘルプ関数は、もう1つの便利な例です。
#!/ bin / bashSCRIPT =$(/ usr / bin / basename $ 0)|| exit 100export SCRIPTfunction help_me {/ usr / bin / cat <
複数行形式は、特に複雑なスクリプトを文書化する場合に、それ自体で非常に便利です。ただし、以前に見たことがあるヒアドキュメントを使用することには、すばらしい工夫があります。
$ /usr/bin/cat < $ HOME/test_doc.txtここに保存したい複数行のドキュメントがあります。HOME=$HOME.EOF<のような内部で変数を使用する方法に注意してください。 / code>
ファイルに書き込まれる内容は次のとおりです。
$ / usr / bin / cat $ HOME / test_doc.txtこれは、保存したい複数行のドキュメントです。HOME=/ home/josevnzなどの内部で変数を使用する方法に注意してください。
次に、この知識を適用できるように、別の場所に移動します。
[Bashのその他のヒントについては、このBashシェルスクリプトのチートシートをダウンロードしてください]
配列と辞書を使用してAnsibleインベントリYAMLファイルを生成する
サーバーまたはデスクトップを含む各行のホストのリストを含む次のCSVファイルがあるとします。
#groupmacmini2:serversraspberrypi:serversdmaf5:desktopsmac-pro-1-1:desktopsでタグ付けされたホストのリスト
リストを次のAnsibleYAMLインベントリファイルに変換します:
<前>は、は---すべて:子供:サーバ:ホスト:macmini2:raspberrypi:varsは:説明:ホスト::dmaf5:MAC-PRO-1-1:ヌニェスの家族のためのLinuxサーバーは、デスクトップvarsの:説明は:デスクトップNunezファミリーの場合
追加の制約:
- 各システムタイプ(デスクトップまたはサーバー)には、
description
と呼ばれる異なる変数があります。 。配列と連想配列およびカウンターを使用すると、この要件を満たすことができます。 - ユーザーがすべての正しいタグを指定しないと、スクリプトは失敗するはずです。不完全な在庫は受け入れられません。この要件には、単純なカウンターが役立ちます。
このスクリプトは目標を達成します:
#!/ bin / bash:<
出力は次のようになります。
<前>のすべて:子供:サーバ:ホスト:macmini2:raspberrypiは:varsの:説明:ヌニェスの家族のためのLinuxサーバーは、デスクトップ:ホスト:dmaf5:MAC-PRO-1-1:varsの:説明:ヌニェスのためにデスクトップを家族
より良い方法は、動的インベントリを作成し、Ansibleプレイブックにそれを使用させることです。例を簡単にするために、ここではそれを行いませんでした。
YAML添付ファイル付きのHTMLメールの送信
最後の例は、ヒアドキュメントをMozilla Thunderbirdにパイプする方法を示しています( / usr / bin / mailx
で同様のことを行うことができます) )HTMLドキュメントと添付ファイルを含むメッセージを作成するには:
#!/ bin / bash:< こんにちは
これは公開のお知らせです$ USERから:
日付 時間 カーネルバージョン $日付 $ TIME Rovelli $ KERNEL_VERSION
メール
次に、メーラースクリプトを呼び出すことができます:
$ ./html_mail.sh [email protected] hosts.yaml
期待どおりに進んだ場合、Thunderbirdは次のようなメールを作成します:

まとめ
要約すると、次の方法を学びました。
- 配列や連想配列などのより高度なデータ構造を使用してドキュメントを生成します
- カウンターを使用してイベントを追跡します
- ヒアドキュメントを使用して、YAMLドキュメント、ヘルプ手順、HTMLなどを作成します。
- HTMLとYAMLを使用してメールを送信する
Bashは、小さくて複雑でないドキュメントを生成するのに問題ありません。大きなドキュメントや複雑なドキュメントを扱っている場合は、PythonやPerlなどの別のスクリプト言語を使用して、少ない労力で同じ結果を得る方がよい場合があります。また、複雑なドキュメントの作成を扱う場合は、実際のデバッガーの重要性を過小評価しないでください。