当前位置: 首页 > news >正文

Clish中xml文件配置的使用方法

1,引入

        之前介绍了klish的源码如何安装和使用,本次介绍一下klish的xml配置文件是如何使用的,介绍其中的<COMMAND>/<PARAM>/<PTYPE>等基础配置,方便以后查看。

2,clish中xml文件的基本语法

1,<OVERVIEW></OVERVIEW> : 定义当前clish,在首次进入时的帮助信息// 在clish的所以xml文件中只能出现一次使用
<OVERVIEW>1 - you can use something CMD by this CLI
</OVERVIEW>注上面定义的文字信息将被显示在clish首次运行,输入help命令显示2,<STARTUP ></STARTUP> : 定义clish启动的根视图和默认的ACTION处理脚本属性:view : 定义clish启动时显示/打开的根viewtimeout : 定义clish输入,不活跃时,超时退出(秒)default_shebang : 第一年默认的脚本处理程序: /bin/bash3,<DETAIL></DETAIL> : 定义首次进入clish时的titile内容上述两个配置一般联合使用在startup.xml中:
<OVERVIEW>1 - you can use something CMD by this CLI
</OVERVIEW>
<STARTUP view="root-view" timeout="30" default_shebang="/bin/sh"><DETAIL>***************************************   welcom to login CLI in ROUTER***************************************</DETAIL><ACTION>echo "Welcome `uname -n` it is `date`"</ACTION>
</STARTUP>
4, <VIEW></VIEW> : 定义命令的视图,基本上所以的命令都应该包含在其内部,如果<COMMAND>不包括在任意视图,那么该命令将被挂载到root视图下属性:name :定义视图名称(唯一)prompt : 定义进入该视图后shell首端提示,类似于:shell中每行会的显示信息depth : 定义视图的深度,与 <CONFIG>配合,达成命令输入的顺序的配置restore: none - 不更改当前视图。view - 当前视图将设置为命令的本机视图。depth - Klish 引擎将找出命令本机视图的深度。然后,它将在当前嵌套视图堆栈中搜索此深度。当前视图将设置为堆栈中保存的视图,其深度等于命令的深度。此外,上下文(“viewid”值)将从堆栈中恢复,默认值:noneaccess: 定义可以接受的权限String ,设置访问权限,admin:super:root,真正的功能通过HOOK标签实现使用:
<VIEW name="enable-view"><COMMAND name="show interfaces"help="Interface status and configuration"><ACTION>ip addr show</ACTION></COMMAND><COMMAND name="show ip interface"help="IP interface status and configuration"><ACTION>ip addr show</ACTION></COMMAND></VIEW>
<VIEW name="network-terminal-view" prompt="network>" depth="1"><!-- TODO: -->
</VIEW>
5, <COMMAND></COMMAND> : 定义一个clish命令的模块,一个VIEW中可以多个,并且可以嵌套可使用的属性:name: 定义命令的名字,即我们输入的命令名称help: 定义命令的帮助信息,当我们Tab h或输入 '?'时,显示lock: BOOL(true/false),定义当前命令,在多个clish实例时是否可以被同时运行interrupt : BOOL(true/false),定义当前命令运行时,是否可以被Ctrl + c终止view: 定义输入当前命令后,可以进入的视图(视图跳转)viewid: 定义进入另一个视图的id,即可以传递一个变量(后面介绍)一般用法:<COMMAND name="config" help="Enter configure mode"/> <COMMAND name="config terminal"help="config from the terminal"view="network-config-view"viewid="iface=index"></COMMAND>
或者<COMMAND name="port" help="network port config" lock="false" interrupt="true" view="network-port-view" viewid="s_index=${s_index}"><PARAM name="s_index" help="config port index[0..n]" ptype="UINT"/><ACTION>echo "------>"</ACTION></COMMAND>
6, <PARAM></PARAM> : 标识命令所带的参数,与COMMAND配合使用属性:name : 参数的名称help : 参数的帮助信息optional : 参数是否可选,(true: 参数可不输入,false:参数必填)mode :switch - 开关选项switch 子命令是一个容器,允许选择唯一的一个子参数进行进一步分析subcommand - 子命令,由PTYPE定义,默认是字符串类型common - 普通参数的标准模式。没什么特别的。默认值ptype : 定义的参数类型,有PTYPE定义order : 带有order=”true”字段的参数,被输入后,会截断所以的可选参数,即不能再输入其他可选参数了view :引用某个视图value : “name” 字段是内部变量的名称。“value”是一个可显示的子命令名称。它允许复制可显示的子命        令名称。Value字段强制PARAM为subcommand.hidden: 参数的可见性 ,BOOL使用:
<COMMAND name="ping"help="Send messages to network hosts"lock="false"interrupt="true"><PARAM name="proto"help="Protocol to use for the ping"optional="true"mode="switch"ptype="SUBCOMMAND"><PARAM name="ip"help="Send ICMP IPv4 messages to network hosts (default)"mode="subcommand"ptype="SUBCOMMAND"/><PARAM name="ipv6"help="Send ICMP IPv6 messages to network hosts"mode="subcommand"ptype="SUBCOMMAND"/><PARAM name="arp"help="Send ARP requests to a neighbour host"mode="subcommand"ptype="SUBCOMMAND"/></PARAM><PARAM name="dst"help="Hostname or IP-address to ping"ptype="STRING"/>
</COMMAND>
7, <PTYPE></PTYPE>  :定义参数的类型属性name : 该字段可以在<PARAM>中的ptype字段使用,名称help : 参数的帮助信息pattern : 通常定义该类型语法的正则表达式method :解释 “pattern” 属性的方法,regexp : 默认的是一个POSIX的正则表达式interger : 数字定义,“min..max”select: 参数可选则,
如:<PTYPE name="IPTYPE"method="select"pattern="ipv4(ipv4) ipv6(ipv6) all(all)"help="Protocol choice ipv4/ipv6/all"/>preprocess: 预处理none - 不做任何动作(default)toupper : 验证前转换为大写tolower : 验证前转小写使用:<PTYPE name="SUBCOMMAND"pattern="[^\]+"help="String"/><PTYPE name="STRING_SIZE32"pattern="^[a-zA-Z0-9:/@\.]{0,32}$"help="string(len 32) "/>
8,<ACTION></ACTION> : 输入命令后的执行动作属性:shebang : 默认的处理动作builtin :内置函数clish_close : 关闭当前clishclish_nop : 什么也不做,clish_nested_up : 视图嵌套,当我们在视图移动时,引擎保存之前的状态,当遇到这个动作时,将回退到前一个状态,如果当前的深度为0,即根VIEW,并且遇到了这个动作,则clish将退出用法:<COMMAND name="show ip interface"help="IP interface status and configuration"><ACTION>ip addr show</ACTION></COMMAND><COMMAND name="exit_up"help="Exit from the CLI in configure"lock="false" interrupt="true"><ACTION builtin="clish_nested_up"/>
</COMMAND>
9. <NAMESPACE></NAMESPACE> :命名空间,视图嵌套此标记可以在 [VIEW] 元素的范围内使用。NAMESPACE 标签允许将命令集从指定视图导入到另一个视图中ref : 引用要从中导入的VIEW,即引用某个视图中的命令
prefix : 导入命令的文本前缀 (所有命令将带上这个前缀)
prefix_help : 当用户已经输入 prefix 但尚未输入命令名称时,将打印它
inherit : 是否递归继承嵌套命名空间命令的布尔标志
completion : 允许是否使用Tab建使用方法:<!-- network 命令测试 --><NAMESPACE ref="network-view"help="true"completion="true"/> 

 以上介绍了klish中的xml的标签的使用,在action标签中还可使用如下脚本指令(类似于shell),需要配合test使用

 

3,总结

        本文介绍了Clish中,xml的一下标签的使用,clish读取xml文件,生成cmd树,一个基本的xml命令文件,包括VIEW / COMMAND/PARAM/ACTION/PTYPE等。

目前已知的一些东西:

        ① ${SYSTEM_NAME} 可为环境变量值,即clish可以读取环境变量,使用${xxx}显示

        ② 在一个VIEW中,可局部定义<PTYPE>,保证参数的输入内心检测和全局的不冲突

        ③ <COMMADN>中name字段可以有空格,如name="show " 和 name="show port",联合使用的命令输入为: show port

        ④ 输入参数时带空格,应这样"4 6t" 输入

        ⑤ NAMESPACE表示把其他VIEW下的视图直接拷贝过来,视图不会被切换,而命令中的VIEW,表示去到另外的视图下操作了,此时视图被切换。

        ⑥ 在viewid中定义的”index=${s_index}“,在切换到另外视图时index可当变量使用其值为${s_index}.

        7, ACTION的动作是先于<COMMAND>中的VIEW属性的。

具体的使用可参考源码中的例子。

相关文章:

  • 黑河流域30弧秒分辨率月尺度地表水及地下水灌溉量数据集(1981-2013)
  • 服务器液冷:突破散热瓶颈,驱动算力革命的“冷静”引擎
  • Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网
  • 记录一次apisix上cros配置跨域失败的问题
  • 达梦数据库:同1台服务器如何启动不同版本的DMAP服务
  • Vue2的diff算法
  • 从门店到移动端:按摩服务预约系统的架构演进与实践
  • C语言创意编程:用趣味实例玩转基础语法(4)
  • Prometheus + Grafana + Cadvisor:构建高效企业级服务监控体系
  • RK3568 OH5.1 编译运行程序hellworld
  • 用美图秀秀批处理工具定制专属图片水印的方法详解
  • Android Native 之 adbd进程分析
  • matlab计算转子系统的固有频率、振型、不平衡响应
  • Java进化之路:从Java 8到Java 21的重要新特性(深度解析)
  • 爬虫--以爬取小说为例
  • 【google 论文】Titans: Learning to Memorize at Test Time
  • grounded_sam2 使用踩坑笔记
  • 第100+41步 ChatGPT学习:R语言实现误判病例分析
  • 【Oracle】DML语言
  • 没有公网ip如何实现外网访问?本地内网服务器应用端口让公网连接使用方法
  • 宝安中心站/百度惠生活商家入驻
  • 软件开发商有哪些/汕头seo外包公司
  • 广州公司排名前十/陕西网站seo
  • 交换机可以做网站跳转吗/百度关键词竞价价格
  • ecs搭建wordpress/做网络优化的公司排名
  • 网站站长统计怎么做/浏览广告赚佣金的app