IOS,即Internetwork Operating System。是Cisco网络设备运行的CLI交互模式的操作系统。也并非所有思科设备都运行IOS,例如ASA防火墙和运行IOS-XR的运营商路由器等。
熟悉Linux、Unix的工程师在操作IOS的时候会发现IOS和Linux shell有许多相似的地方。例如
使用dir命令,可以看到和Linux ls命令相似的文件列表。其中有Inode、权限、时间戳等我们熟知的参数。
有过系统运维经验的朋友一定试过这个命令
利用Uname命令查看系统内核版本。我也尝试过这个命令,得到如图所示的提示。大致内容是说我键入的命令在IOS.sh中可用,然而这个shell现在被禁用了,我可以用相关命令开启它。在整个Cisco的学习过程中,我并没有学习过,甚至没听别人提及这个小功能。在尝试这个指令后我查询过相关的资料,对于这个Function也是描述较少。
首先我们看一下这条命令和它的功能
这条命令字面意思是开启所有IOS shell模块
我们键入这条命令后也没有任何的提示
开启这条命令后我们再次尝试一下
可以看到我们当前IOS版本为15.4
看一下CISCO官方给出的功能解释
大致意思是IOS.sh特性基于IOS CLI环境,想要使用这个特性需要在配置中打开,IOS.sh打开后,用户可以执行以下的任务
定义和使用环境变量
使用控制结构来执行自动化任务
创建和使用IOS.sh函数
使用新的函数集,多样化的文本调用
可以使用扩展的管道符让输出的结果作为下个命令的输入
对文本和变量值集的算法表达和逻辑评价
使用在线帮助手册描述这些变化
所有这些特性都有描述,有举例说明。
但是IOS.sh支持的命令较少,虽然这个特性让人眼前一新,很有开发的潜力,但是局限性也是很大。
IOS.sh中我们也可以使用man命令来获取帮助
好了,介绍就到此为止,我们来尝试下开启shell proccessing full之后有什么好玩的小技巧吧
- 首先是最简单的,变量可以使用了。
分号分割的多条命令,依次执行既然我们可以使用变量了,让我们利用位置变量创建一个简单的脚本并进行测试脚本相当于R1#conf tR1(config)#int $1R1(config-if)#descri $2R1(config)#end测试我们的脚本在我们执行脚本的过程中,第一个参数’e0/0’就是脚本中的$1,’Hello world’就是$2。这就是位置变量的应用。在举个例子,例如我们OSPF接口配置进行测试在实际工作中,需要大量配置的场景,利用IOS.sh可以大幅度简化我们的操作。 -
过滤我们显示的内容在Linux运维中,针对文件多种过滤方法可以让我们快速定位到想要的内容。在IOS.sh完全开启后,我们也可以像Linux一样,利用管道符’|’和一些命令对显示内容进行过滤。举个例子,我们现在要显示show run 命令中所有带有no的行,可以有人会说不开启shell processing full用show run | sec no也能实现,但是开启之后我们可以这样例如显示这些带no行中第二列的内容这里解释一下,cut -f 2 -d ‘ ‘的意思是:以空格为界限,显示管道之前内容的第二列。利用这些功能,我们可以像这样查看所有接口的IP地址
查看前五行内容
查看历史信息最后5行到这里,是不是有点系统运维的感觉了呢? - 支持for,while等多种循环结构
- 创建一个简单的for循环测试
测试结果
- 创建一个简单的if判断 主机保活测试
测试结果
测试几个小脚本
- 例如这是一个方便我们创建VLAN的脚本
我们利用这个脚本创建VLAN,只需要Router(config)#vlan interface vlan-id就能很便捷的为接口创建VLAN
进行测试
如图所示,我们省略了大部分繁琐的操作,实现了快速创建VLAN的方法。
- 这是一个快速为接口创建IP地址的脚本
进行测试
也许你还嫌不够精简,我们可以为192.168.1.0网段和24位子网设置环境变量
这下我们只需要引入环境变量就能配置IP,像这样
省去了一些操作。
在CCIE的LAB实验中也有简短的关于IOS shell的考核。算是比较细枝末节的东西了,而且考核非常简单,就是针对输出进行内容过滤。以上的几个例子只是抛砖引玉,也许作用放不明显,但是合理应用这个特性,会更加简洁的实现我们的工作。