이 페이지에서
예: 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