사용자 지정 YANG 모듈에 대한 CLI에 유효한 명령 옵션 및 구성 문 값 표시
특정 Junos 디바이스를 사용하면 디바이스에서 사용자 지정 YANG 모듈을 로드하여 Junos OS 의해 기본적으로 지원되지 않는 데이터 모델을 추가할 수 있습니다. 디바이스에 사용자 지정 YANG 데이터 모델을 추가할 때 YANG 데이터 모델과 Junos OS 간의 변환 논리를 처리하는 작업 또는 변환 스크립트도 제공해야 합니다. 스크립트 로직은 사용자가 주어진 명령 옵션 또는 구성 문에 대해 유효한 값을 제공하도록 보장할 수 있지만 해당 로직이 항상 사용자에게 투명하지는 않습니다. 릴리스 19.2R1 Junos OS 시작 시 CLI는 옵션 또는 문 정의에 확장 문을 포함하고 action-expand
논리를 처리하는 스크립트를 참조할 때 사용자 지정 YANG 데이터 모델에 특정 명령 옵션 또는 구성 문에 대한 가능한 값 집합을 표시합니다.
사용자 지정 YANG 모듈에 대한 컨텍스트에 민감한 도움말 이해하기
Junos CLI는 운영 또는 구성 모드에서 물음표(?)를 입력할 때마다 컨텍스트에 민감한 도움을 제공합니다. 명령을 실행하거나 문을 구성할 때 CLI의 컨텍스트에 민감한 도움말은 구성 문 계층에서 명령 또는 유효한 구성 문 및 리프 문 값에 대한 유효한 옵션 및 옵션 값을 표시합니다. 또한 컨텍스트에 민감한 도움말은 불완전한 옵션 이름, 문 이름 및 해당 값의 가능한 완료를 보여줍니다.
또한 CLI는 사용자 지정 YANG 데이터 모델에서 특정 명령 옵션 또는 구성 문에 유효한 값을 표시할 수 있습니다. CLI는 사용자의 부분 입력과 일치하는 가능한 모든 값 또는 값의 하위 집합을 표시할 수 있습니다. 예를 들어:
user@host> show host-status hostip ? Possible completions: <hostip> Host IP address 10.10.10.1 IPv4 address 10.10.10.2 IPv4 address 172.16.0.1 IPv4 address 198.51.100.1 IPv4 address 198.51.100.10 IPv4 address 2001:db8::1 IPv6 address (DC 1...128) 2001:db8::fdd2 IPv6 address (DC 1...128)
user@host> show host-status hostip 198? Possible completions: <hostip> Host IP address 198.51.100.1 IPv4 address 198.51.100.10 IPv4 address
사용자 지정 YANG 모듈에서 주어진 명령 옵션 또는 구성 문에 대한 유효한 값 집합을 표시하려면 다음을 수행합니다.
-
YANG 모듈 정의에
action-expand
설명된 대로 YANG 모듈의 적절한 입력 매개변수 또는 구성 문에 따라 및script
확장 문을 정의합니다. -
사용자 입력을 확인하고, 명령 옵션 또는 구성 명령문의 가능한 값을 계산하고, CLI 확장 스크립트 생성에 설명된 대로 적절한 출력을 CLI로 전송하는 Python 스크립트를 생성합니다.
참고:CLI 확장 스크립트는 CLI에 유효한 값만 표시합니다. 모듈의 변환 스크립트 또는 작업 스크립트에는 유효한 값만 수락 및 처리되도록 하는 로직이 여전히 포함되어야 합니다.
-
YANG 패키지 로드에 설명된 대로 YANG 모듈, 모든 변환 또는 작업 스크립트 및 디바이스에서 사용자 지정 YANG 패키지의 일부로 CLI 확장 스크립트 를 로드합니다.
참고:Junos 디바이스가 CLI 확장 스크립트를 다른 종류의 작업 스크립트로 처리하지만, 혼동을 피하기 위해 CLI 확장 스크립트를 참조합니다.
YANG 모듈 정의
사용자가 CLI에서 컨텍스트에 민감한 도움을 요청할 때 주어진 명령 옵션 또는 구성 문에 대한 유효한 값 집합을 표시하는 사용자 지정 YANG 모듈을 정의하려면 모듈은 다음을 수행해야 합니다.
예를 들어, 다음 모듈에서 RPC는 사용자가 CLI에서 인수에 hostip
대한 hostip
컨텍스트에 민감한 도움을 요청할 때 Python 스크립트를 호출 hostip-expand.py
하는 입력 매개변수를 정의합니다. 스크립트는 CLI에서 해당 인수에 대한 유효한 값을 표시하는 사용자 지정 논리를 구현합니다.
module rpc-host-status { namespace "http://yang.juniper.net/examples/rpc-cli"; prefix jrpc; import junos-extension-odl { prefix junos-odl; } import junos-extension { prefix junos; } rpc get-host-status { description "RPC example to retrieve host status"; junos:command "show host-status" { junos:action-execute { junos:script "rpc-host-status.py"; } } input { leaf hostip { description "Host IP address"; type string; junos:action-expand { junos:script "hostip-expand.py"; } } leaf level { type enumeration { enum brief { description "Display brief output"; } enum detail { description "Display detailed output"; } } } } output { ... } } }
CLI 확장 스크립트 만들기
사용자 지정 YANG 모듈에서 명령 옵션 또는 구성 문에 대한 문 및 script
하위 설정을 정의 action-expand
하고 CLI에서 해당 옵션 또는 문 값에 대한 컨텍스트에 민감한 도움을 요청하면 디바이스는 참조된 Python 스크립트를 호출합니다. 스크립트에는 해당 매개 변수에 대해 가능한 모든 값을 계산하고 표시하는 사용자 지정 로직이 포함되어야 하며, 사용자의 부분 입력과 일치하는 값 하위 집합을 표시해야 합니다.
예를 들어, 다음 명령은 인수에 대한 hostip
모든 유효한 값을 표시해야 합니다.
user@host> show host-status hostip ?
그리고 다음 명령은 "198"으로 시작하는 모든 유효한 값을 표시해야 합니다.
user@host> show host-status hostip 198?
CLI에서 명령 옵션 또는 구성 문에 대한 유효한 값을 표시하려면 Python 스크립트는 다음 기능을 수행해야 합니다.
-
jcs
다른 필요한 Python 라이브러리와 함께 라이브러리를 가져옵니다. -
모든 사용자 입력을 검색하고 처리합니다.
CLI에서 옵션 또는 문 값에 대한 부분 입력을 지정하는 경우 스크립트의 명령줄 인수에는 사용자 입력을 포함하는 문자열인 인수가 포함됩니다
symbol
.참고:릴리스 21.2R1 Junos OS 및 Evolved 릴리스 21.2R1 Junos OS 스크립트의 명령줄 인수에는 인자 대신 인수가
symbol
포함됩니다--symbol
. -
매개 변수에 대한 유효한 값을 정의하거나 계산합니다.
-
명령줄에
jcs.expand()
표시할 각 값의 함수를 호출합니다.
스크립트는 CLI에 jcs:expand()
표시하려면 각 옵션 또는 문 값에 대한 함수를 호출해야 합니다. 이 함수의 구문 jcs:expand()
은 다음과 입니다.
jcs.expand(value, description, <units>, <range>)
어디:
value | 주어진 명령 옵션 또는 구성 문에 대해 유효한 값을 정의하는 문자열입니다. |
description | 값을 설명하는 문자열입니다. |
units | (선택 사항) 해당 값에 대한 단위를 정의하는 문자열입니다. |
range | (선택 사항) 해당 값의 범위를 정의하는 문자열입니다. |
함수에 jcs.expand()
대한 각 호출에 대해 스크립트는 CLI의 기능 인수에서 제공되는 값, 설명, 단위 및 범위를 내보낸다. 예를 들어 스크립트에서 다음 통화를 할 jcs.expand()
수 있습니다.
jcs.expand("2001:db8:4136::fdd2", "IPv6 address", "DC", "1...128")
해당 CLI 출력은 다음과 입니다.
Possible completions: <hostip> Host IP address 2001:db8:4136::fdd2 IPv6 address (DC 1...128)
다음 샘플 스크립트는 먼저 스크립트의 symbol
명령줄 인수에 있는지 확인하고 있는 경우 해당 변수를 사용자의 입력과 동일하게 설정합니다. 그런 다음 스크립트는 사용자의 입력을 기반으로 매개 변수에 대한 유효한 값 집합을 계산합니다. 마지막으로, 스크립트는 CLI에 jcs.expand()
표시할 각 값의 함수를 호출합니다.
우리는 스크립트의 두 가지 버전을 제공하며, 이는 서로 다른 릴리스에 대한 스크립트의 symbol
인수를 적절하게 처리합니다. 릴리스 21.2R1 이상에서 Junos OS 실행되는 디바이스에서 유효한 다음 샘플 스크립트는 라이브러리를 사용하여 argparse
인수를 구문 분석합니다 --symbol
.
#!/usr/bin/python3 # Junos OS Release 21.2R1 and later import jcs import argparse parser = argparse.ArgumentParser(description='This is a demo script.') parser.add_argument('--symbol', required=False, default='') args = parser.parse_args() description_ipv4 = "IPv4 address" description_ipv6 = "IPv6 address" expand_colon = ":" expand_units = "DC" expand_range = "1...128" item = ["10.10.10.1", "10.10.10.2", "2001:db8::1", "172.16.0.1", "198.51.100.1", "198.51.100.10", "2001:db8::fdd2"] for ip in item: if ip.startswith(args.symbol) or not args.symbol: if not expand_colon in ip: jcs.expand(ip, description_ipv4) else: jcs.expand(ip, description_ipv6, expand_units, expand_range)
마찬가지로, 릴리스 21.1 또는 이전 Junos OS 실행되는 디바이스에서 sys.argv
유효한 다음 샘플 스크립트가 목록에서 확인 symbol
합니다.
#!/usr/bin/python # Junos OS Release 21.1 and earlier import sys import jcs symbol = "" # Retrieve user input in symbol argument and store the value if "symbol" in sys.argv: index = sys.argv.index("symbol") symbol = sys.argv[index+1] description_ipv4 = "IPv4 address" description_ipv6 = "IPv6 address" expand_colon = ":" expand_units = "DC" expand_range = "1...128" item = ["10.10.10.1", "10.10.10.2", "2001:db8::1", "172.16.0.1", "198.51.100.1", "198.51.100.10", "2001:db8::fdd2"] for ip in item: if ip.startswith(symbol) or not symbol: if not expand_colon in ip: jcs.expand(ip, description_ipv4) else: jcs.expand(ip, description_ipv6, expand_units, expand_range)
CLI 확장 스크립트는 CLI에서 명령 옵션 또는 구성 문에 대한 유효한 값, 단위 및 범위만 표시합니다. 모듈의 번역 스크립트 또는 작업 스크립트는 유효한 값만 수락 및 처리되도록 해야 합니다.
YANG 패키지 로드
Junos 디바이스에서 YANG 패키지를 로드할 때, 해당 패키지에 대한 작업 스크립트 목록에 모든 CLI 확장 스크립트를 포함합니다. Junos OS 스크립트를 /var/db/scripts/action directory에 자동으로 복사합니다.
새 패키지를 로드하고 사용자 지정 CLI 확장 스크립트를 포함하려면 다음을 수행합니다.
예: 명령 옵션에 대한 컨텍스트에 민감한 도움말 표시
이 예에서는 사용자가 해당 옵션에 대해 CLI에서 action-expand
컨텍스트에 민감한 도움을 요청할 때 확장 문과 사용자 지정 스크립트를 사용하여 명령 옵션 중 하나에 대한 가능한 값 집합을 표시하는 사용자 지정 YANG 모듈을 제시합니다.
요구 사항
이 예는 다음과 같은 하드웨어 및 소프트웨어 구성 요소를 사용합니다.
-
사용자 지정 YANG 데이터 모델 로드를 지원하는 릴리스 19.2R1 이상에서 Junos OS 실행되는 디바이스입니다.
개요
이 예의 YANG 모듈은 지정된 호스트를 ping하고 결과를 반환하는 사용자 지정 RPC를 정의합니다. YANG 모듈 rpc-host-status
은 rpc-host-status.yang 파일에 저장됩니다. 모듈은 Junos OS 확장 모듈을 가져옵니다. 이 모듈은 디바이스에서 사용자 지정 RPC를 실행하고 CLI에서 출력과 컨텍스트에 민감한 도움을 사용자 정의하는 데 필요한 확장을 제공합니다.
모듈은 RPC를 get-host-status
정의합니다. 문은 junos:command
CLI에서 RPC를 실행하는 데 사용되는 명령을 정의합니다. 이 경우 입니다show host-status
. 및 junos:script
문은 junos:action-execute
RPC를 실행할 때 호출되는 작업 스크립트를 정의합니다.
rpc get-host-status { description "RPC example to retrieve host status"; junos:command "show host-status" { junos:action-execute { junos:script "rpc-host-status.py"; } }
입력 매개변수에는 hostip
및 junos:script
명령문이 포함되어 junos:action-expand
있으며, 이는 사용자가 해당 입력 매개변수에 대해 CLI에서 컨텍스트에 민감한 도움을 요청할 때 호출되는 스크립트를 정의합니다.
input { leaf hostip { description "Host IP address"; type string; junos:action-expand { junos:script "hostip-expand.py"; } } ... }
hostip-expand.py 스크립트는 사용자의 입력을 처리하며, 이 입력은 릴리스에 따라 인자로 symbol
또는 --symbol
인자로 스크립트로 전달됩니다. 그런 다음 스크립트는 사용자가 해당 명령 옵션에 대해 입력할 수 있는 값 집합을 계산하고 표시합니다.
Junos OS 릴리스 21.2R1 및 Junos OS Evolved 릴리스 21.2R1부터 디바이스가 CLI 확장 스크립트를 포함한 Python 작업 스크립트에 명령줄 인수를 전달하면 단일 하이픈(-)을 단일 문자 인자 인자 이름에 접두사하고 2개의 하이픈(--)을 다중 문자 인수 이름에 접두사합니다.
확장 스크립트는 CLI에 대한 hostip
유효한 값을 표시합니다. 작업 스크립트는 제공된 값이 유효한지 여부를 결정하는 로직을 구현합니다. 이 예에서는 라는 새로운 YANG 패키지 rpc-host-status
의 일부로 YANG 모듈과 작업 스크립트를 디바이스에 추가합니다.
YANG 모듈 및 작업 스크립트
YANG 모듈
YANG 모듈 rpc-host-status.yang은 RPC, CLI에서 RPC를 실행하는 데 사용되는 명령, RPC를 실행할 때 호출할 작업 스크립트 이름 및 사용자가 해당 입력 매개 변수에 대해 컨텍스트에 민감한 도움을 요청할 때 호출할 CLI 확장 스크립트의 이름을 정의합니다.
/* * Copyright (c) 2019 Juniper Networks, Inc. * All rights reserved. */ module rpc-host-status { namespace "http://yang.juniper.net/examples/rpc-cli"; prefix jrpc; import junos-extension-odl { prefix junos-odl; } import junos-extension { prefix junos; } organization "Juniper Networks, Inc."; description "Junos OS YANG module for RPC example"; rpc get-host-status { description "RPC example to retrieve host status"; junos:command "show host-status" { junos:action-execute { junos:script "rpc-host-status.py"; } } input { leaf hostip { description "Host IP address"; type string; junos:action-expand { junos:script "hostip-expand.py"; } } leaf level { type enumeration { enum brief { description "Display brief output"; } enum detail { description "Display detailed output"; } } } } output { container host-status-information { leaf hostip { type string; description "Host IP"; } leaf status { type string; description "Operational status"; } leaf date { type string; description "Date information"; } junos-odl:style brief { junos-odl:format host-status-information-format-brief { junos-odl:header "Brief output\n"; junos-odl:picture "@<<<<<<<<<<<< @"; junos-odl:space; junos-odl:line { junos-odl:field "hostip"; junos-odl:field "status"; } } } junos-odl:style detail { junos-odl:format host-status-information-format-detail { junos-odl:header "Detail output\n"; junos-odl:picture "@<<<<<<<<<<<< @<<<<<<<<<<<< @"; junos-odl:space; junos-odl:line { junos-odl:field "hostip"; junos-odl:field "status"; junos-odl:field "date"; } } } } } } }
작업 스크립트
해당 작업 스크립트가 rpc-host-status.py. 이 예는 작업 스크립트의 두 가지 버전을 제공하며, 이는 다양한 릴리스에 대한 스크립트의 명령줄 인수를 적절하게 처리합니다.
작업 스크립트(Junos OS 릴리스 21.2R1 이상)
#!/usr/bin/python3 # Junos OS Release 21.2R1 and later import os import argparse parser = argparse.ArgumentParser(description='This is a demo script.') parser.add_argument('--hostip', required=True) parser.add_argument('--level', required=False, default='brief') parser.add_argument('--rpc_name', required=True) args = parser.parse_args() valid_addresses = ["10.10.10.1", "10.10.10.2", "2001:db8::1", "172.16.0.1", "198.51.100.1", "198.51.100.10", "2001:db8::fdd2"] f = os.popen('date') now = f.read() # Ping target host and set the status if args.hostip in valid_addresses: response = os.system('ping -c 1 ' + args.hostip + ' > /dev/null') if response == 0: pingstatus = "Host is Active" else: pingstatus = "Host is Inactive" else: pingstatus = "Invalid host" # Print RPC XML for the given style print ("<host-status-information>") print ("<{}>".format(args.level)) print ("<hostip>{}</hostip>".format(args.hostip)) print ("<status>{}</status>".format(pingstatus)) if args.level == "detail": print ("<date>{}</date>".format(now)) print ("</{}>".format(args.level)) print ("</host-status-information>")
작업 스크립트(Junos OS 릴리스 21.1 이전 버전)
#!/usr/bin/python # Junos OS Release 21.1 and earlier import sys import os args = {'hostip': None, 'level': 'brief'} valid_addresses = ["10.10.10.1", "10.10.10.2", "2001:db8::1", "172.16.0.1", "198.51.100.1", "198.51.100.10", "2001:db8::fdd2"] # Retrieve user input and store the values in the args dictionary for arg in args.keys(): if arg in sys.argv: index = sys.argv.index(arg) args[arg] = sys.argv[index+1] f = os.popen('date') now = f.read() # Ping target host and set the status if args['hostip'] in valid_addresses: response = os.system('ping -c 1 ' + args['hostip'] + ' > /dev/null') if response == 0: pingstatus = "Host is Active" else: pingstatus = "Host is Inactive" else: pingstatus = "Invalid host" # Print RPC XML for the given style print ("<host-status-information>") print ("<{}>".format(args['level'])) print ("<hostip>{}</hostip>".format(args['hostip'])) print ("<status>{}</status>".format(pingstatus)) if args['level'] == "detail": print ("<date>{}</date>".format(now)) print ("</{}>".format(args['level'])) print ("</host-status-information>")
CLI 확장 스크립트
CLI에서 유효한 값을 표시하기 위해 hostip
논리를 처리하는 작업 스크립트가 hostip-expand.py. 이 예는 스크립트의 두 가지 버전을 제공하며, 이는 서로 다른 릴리스에 대한 스크립트의 인수를 적절하게 처리합니다.
CLI 확장 스크립트(Junos OS 릴리스 21.2R1 이상)
#!/usr/bin/python3 # Junos OS Release 21.2R1 and later import jcs import argparse parser = argparse.ArgumentParser(description='This is a demo script.') parser.add_argument('--symbol', required=False, default='') args = parser.parse_args() description_ipv4 = "IPv4 address" description_ipv6 = "IPv6 address" expand_colon = ":" expand_units = "DC" expand_range = "1...128" item = ["10.10.10.1", "10.10.10.2", "2001:db8::1", "172.16.0.1", "198.51.100.1", "198.51.100.10", "2001:db8::fdd2"] for ip in item: if ip.startswith(args.symbol) or not args.symbol: if not expand_colon in ip: jcs.expand(ip, description_ipv4) else: jcs.expand(ip, description_ipv6, expand_units, expand_range)
CLI 확장 스크립트(Junos OS 릴리스 21.1 이전 버전)
#!/usr/bin/python # Junos OS Release 21.1 and earlier import sys import jcs symbol = "" # Retrieve user input in symbol argument and store the value if "symbol" in sys.argv: index = sys.argv.index("symbol") symbol = sys.argv[index+1] description_ipv4 = "IPv4 address" description_ipv6 = "IPv6 address" expand_colon = ":" expand_units = "DC" expand_range = "1...128" item = ["10.10.10.1", "10.10.10.2", "2001:db8::1", "172.16.0.1", "198.51.100.1", "198.51.100.10", "2001:db8::fdd2"] for ip in item: if ip.startswith(symbol) or not symbol: if not expand_colon in ip: jcs.expand(ip, description_ipv4) else: jcs.expand(ip, description_ipv6, expand_units, expand_range)
구성
Python 스크립트 실행 활성화
디바이스가 부호 없는 Python 스크립트를 실행할 수 있도록 하는 방법:
-
Junos OS 릴리스에
language python
적합한 또는language python3
문을 구성합니다.[edit] user@host# set system scripts language (python | python3)
참고:Junos OS 릴리스 20.2R1부터 Evolved 릴리스 22.3R1 Junos OS, 디바이스는 Python 3을 사용하여 YANG 작업 및 변환 스크립트를 실행합니다. 이전 릴리스에서 Junos OS Python 2.7만 사용하여 이러한 스크립트를 실행하고, Junos OS Evolved는 기본적으로 Python 2.7을 사용하여 스크립트를 실행합니다.
-
구성을 커밋합니다.
[edit] user@host# commit and-quit
디바이스에 YANG 모듈 및 스크립트 로드
YANG 모듈과 스크립트를 Junos 디바이스에 추가하려면,
-
YANG 모듈 및 스크립트를 Junos 디바이스로 다운로드합니다.
-
Python 스크립트가 다음 요구 사항을 충족하는지 확인합니다.
-
파일 소유자는 Junos OS 로그인 클래스의
super-user
루트 또는 사용자입니다. -
파일 소유자만 파일에 대한 쓰기 권한을 가 니다.
-
스크립트에는 Junos 디바이스의 YANG RPC에 대한 작업 스크립트 생성에 설명된 대로 적절한 인터프리터 지시문 줄이 포함되어 있습니다.
-
-
(선택 사항) YANG 모듈 및 작업 스크립트에 대한 구문을 검증합니다.
user@host> request system yang validate module /var/tmp/rpc-host-status.yang action-script [ /var/tmp/rpc-host-status.py /var/tmp/hostip-expand.py ] YANG modules validation : START YANG modules validation : SUCCESS Scripts syntax validation : START Scripts syntax validation : SUCCESS
-
YANG 모듈과 스크립트를 새 YANG 패키지에 추가합니다.
user@host> request system yang add package rpc-host-status module /var/tmp/rpc-host-status.yang action-script [ /var/tmp/rpc-host-status.py /var/tmp/hostip-expand.py ] YANG modules validation : START YANG modules validation : SUCCESS Scripts syntax validation : START Scripts syntax validation : SUCCESS TLV generation: START TLV generation: SUCCESS Building schema and reloading /config/juniper.conf.gz ... mgd: commit complete Restarting mgd ...
-
시스템에서 Junos OS CLI를 다시 시작하라는 메시지가 표시되면 을(를) 눌러
Enter
, 의 기본 값을yes
수락하거나 을(를) 입력 yes 하고 누릅니다Enter
.WARNING: cli has been replaced by an updated version: ... Restart cli using the new version ? [yes,no] (yes) yes Restarting cli ...
컨텍스트에 민감한 도움말 확인
목적
CLI 확장 스크립트가 예상대로 작동하는지 확인합니다.
작업
운영 모드에서 RPC 정의에서 문으로 정의된 junos:command
명령을 실행하여 CLI에서 컨텍스트에 민감한 도움을 요청하고 입력 인수와 물음표(?)를 포함합니다 hostip
.
user@host> show host-status hostip ? Possible completions: <hostip> Host IP address 10.10.10.1 IPv4 address 10.10.10.2 IPv4 address 172.16.0.1 IPv4 address 198.51.100.1 IPv4 address 198.51.100.10 IPv4 address 2001:db8::1 IPv6 address (DC 1...128) 2001:db8::fdd2 IPv6 address (DC 1...128)
부분 사용자 입력으로 동일한 작업을 수행하고 표시된 값이 입력과 올바르게 일치하는지 확인합니다.
user@host> show host-status hostip 198? Possible completions: <hostip> Host IP address 198.51.100.1 IPv4 address 198.51.100.10 IPv4 address
의미
컨텍스트에 민감한 도움말이 값에 hostip
대해 요청되면 디바이스는 스크립트를 hostip-expand.py
호출합니다. 스크립트는 제공된 경우 사용자의 입력을 처리하고 CLI에서 유효한 완료물을 인쇄합니다. 사용자 입력이 제공되지 않으면 스크립트가 가능한 모든 값을 인쇄합니다. 사용자 입력이 제공되면 스크립트는 일치하는 값만 인쇄합니다.