このページで
例:Op スクリプトを使用したファイルの検索
このサンプルスクリプトは、Junos OSを実行しているデバイス上のファイルを検索し、指定された正規表現に一致する行を検索します。この例では、jcs:grep
opスクリプトでテンプレートを使用しています。
要件
この例では、Junos OSを実行しているデバイスを使用しています。
概要と運用スクリプト
テンプレートは jcs:grep
、正規表現に一致する行を ASCII ファイルで検索します。このテンプレートは 、junos.xsl インポートファイルに存在し、Junos OSを実行しているすべてのスイッチ、ルーター、セキュリティデバイスで利用可能な標準Junos OSインストールに含まれています。テンプレートを jcs:grep
スクリプトで使用するには、 junos.xsl ファイルをスクリプトにインポートし、URI http://xml.juniper.net/junos/commit-scripts/1.0 によって識別される名前空間にプレフィックスをマッピング jcs
する必要があります。
この例では、テンプレートに必要なすべての値が jcs:grep
グローバル パラメーターとして定義されています。パラメーターの値は、コマンドライン引数としてスクリプトに渡されます。以下のスクリプトは、 filename
入力ファイル パスと正規表現の値を格納する 2 つのパラメーターと pattern
、 を定義します。スクリプトの実行時にいずれかの引数を省略すると、エラーが生成され、実行が停止されます。それ以外の場合、スクリプトはテンプレートを jcs:grep
呼び出し、指定された引数を渡します。
正規表現に構文エラーが含まれている場合、テンプレートはjcs:grep
ファイル内のerror: regex error
各行にメッセージを生成します。正規表現の構文が有効な場合、テンプレートは入力ファイルを解析します。一致するごとに、テンプレートは<match>
、子タグを<output>
含む<input>
要素を結果ツリーに追加します。テンプレートは、子要素に一致する文字列を<output>
書き込み、対応する一致行を子要素に<input>
書き込みます。
<match> { <input> <output> }
SLAX スクリプトでは、オペレーターは :=
テンプレート呼び出しの結果を jcs:grep
一時変数にコピーし、その変数に対して関数を node-set
実行します。演算子は :=
、スクリプトがコンテンツに results
アクセスできるように、変数が結果ツリー フラグメントではなくノードセットであることを確認します。XSLT スクリプトは、同等の手順を明示的に呼び出します。その後、スクリプトは結果のすべての入力要素をループし、各一致を印刷します。
XSLT 構文
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0" version="1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:variable name="arguments"> <argument> <name>filename</name> <description>name of file in which to search for the specified pattern </description> </argument> <argument> <name>pattern</name> <description>regular expression</description> </argument> </xsl:variable> <xsl:param name="filename"/> <xsl:param name="pattern"/> <xsl:template match="/"> <op-script-results> <xsl:choose> <xsl:when test="$filename = ''"> <xnm:error> <message>missing mandatory argument 'filename'</message> </xnm:error> </xsl:when> <xsl:when test="$pattern = '';"> <xnm:error> <message>missing mandatory argument 'pattern'</message> </xnm:error> </xsl:when> <xsl:otherwise> <xsl:variable name="results-temp"> <xsl:call-template name="jcs:grep"> <xsl:with-param name="filename" select="$filename"/> <xsl:with-param name="pattern" select="$pattern"/> </xsl:call-template> </xsl:variable> <xsl:variable xmlns:ext="http://xmlsoft.org/XSLT/namespace" name="results" select="ext:node-set($results-temp)"/> <output> <xsl:value-of select="concat('Search for ', $pattern, ' in ', $filename)"/> </output> <xsl:for-each select="$results//input"> <output> <xsl:value-of select="."/> </output> </xsl:for-each> </xsl:otherwise> </xsl:choose> </op-script-results> </xsl:template> </xsl:stylesheet>
SLAX 構文
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; var $arguments = { <argument> { <name> "filename"; <description> "name of file in which to search for the specified pattern"; } <argument> { <name> "pattern"; <description> "regular expression"; } } param $filename; param $pattern; match / { <op-script-results> { if ($filename = '') { <xnm:error> { <message> "missing mandatory argument 'filename'"; } } else if ($pattern = '') { <xnm:error> { <message> "missing mandatory argument 'pattern'"; } } else { var $results := { call jcs:grep($filename, $pattern); } <output> "Search for " _ $pattern _ " in " _ $filename; for-each ($results//input) { <output> .; } } } }
構成
手順
手順
スクリプトをダウンロード、有効化、実行するには、以下の手順にしたがっています。
XSLT または SLAX スクリプトをテキスト ファイルにコピーし、 必要に応じて grep.xsl または grep.slax というファイルに名前を付け、デバイスの /var/db/scripts/op/ ディレクトリにダウンロードします。
設定モードでは、 階層レベルで ステートメントを
file
[edit system scripts op]
、必要に応じて grep.xsl または grep.slax を含めます。[edit system scripts op] user@host# set file grep.(slax | xsl)
コマンドを
commit and-quit
発行して設定をコミットし、動作モードに戻ります。[edit] user@host# commit and-quit
運用モード コマンドを発行して、op スクリプトを
op grep filename filename pattern pattern
実行します。
検証
スクリプトの引数の検証
目的
引数の名前と説明が CLI(コマンドライン インターフェイス)のヘルプに表示されていることを確認します。
アクション
動作モード コマンドを op grep ?
発行します。CLI は、スクリプト内のグローバル変数 arguments
内の定義に基づいて、スクリプト引数の補完候補をリストします。
user@host> op grep Possible completions: <[Enter]> Execute this command <name> Argument name detail Display detailed output filename name of file in which to search for the specified pattern pattern regular expression | Pipe through a command
Op スクリプト実行の検証
目的
スクリプトが想定どおりに動作していることを確認します。
アクション
コマンドを発行しても op grep
、ファイル名または正規表現パターンのいずれかを指定できない場合、スクリプトはエラーメッセージを発行して実行を停止します。例えば:
user@host> op grep filename /var/log/messages error: missing mandatory argument 'pattern' user@host> op grep pattern SNMP_TRAP_LINK_DOWN error: missing mandatory argument 'filename'
コマンドを op grep filename filename pattern pattern
発行すると、このスクリプトは、正規表現に一致する入力ファイルからのすべての行を一覧表示します。
user@host> op grep filename /var/log/messages pattern SNMP_TRAP_LINK_DOWN Search for SNMP_TRAP_LINK_DOWN in /var/log/messages Feb 24 09:04:00 host mib2d[1325]: SNMP_TRAP_LINK_DOWN: ifIndex 543, ifAdminStatus down(2), ifOperStatus down(2), ifName lt-0/1/0.9 Feb 24 09:04:00 host mib2d[1325]: SNMP_TRAP_LINK_DOWN: ifIndex 542, ifAdminStatus down(2), ifOperStatus down(2), ifName lt-0/1/0.10