이 페이지에서
예: Op 스크립트를 사용하여 파일 검색
이 샘플 스크립트는 Junos OS 실행하는 디바이스의 파일을 검색하여 주어진 정규 표현식과 일치하는 줄을 검색합니다. 이 예는 op 스크립트에서 템플릿을 사용합니다jcs:grep
.
요구 사항
이 예는 Junos OS 실행하는 디바이스를 사용합니다.
개요 및 Op 스크립트
템플릿은 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
필요한 모든 값은 전역 매개 변수로 정의됩니다. 매개 변수 값은 명령줄 인수로 스크립트에 전달됩니다. 다음 스크립트는 입력 파일 경로 및 pattern
정규 표현식의 값을 저장하는 두 개의 매개 변수 filename
와 을(를) 정의합니다. 스크립트를 실행할 때 인자 중 하나를 생략하면 스크립트가 오류를 생성하고 실행을 중단합니다. 그렇지 않으면 스크립트가 템플릿을 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/ directory로 다운로드합니다.
구성 모드에서
[edit system scripts op]
계층 수준에서 문을 포함하고file
적절한 경우 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
하지만 파일 이름이나 regex 패턴을 제공하지 않으면 스크립트가 오류 메시지를 발행하고 실행을 중단합니다. 예를 들어:
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