最近在 PC 上玩 Cisco 模拟器 Dynamips,网上搜索资料的时候发现 Cisco IOS 从 12.3(2)T 开始就支持 Tcl 脚本了。大喜,马上下了 7200 路由器上的 12.4 IOS 来试验。

Router>
Router>enable
Router#tclsh
Router(tcl)#puts $tcl_version
8.3
Router(tcl)#package names
tbcload Tcl
Router(tcl)#info commands
tell socket subst open eof pwd glob list exec pid snmp_getone time eval lrange t
cl_trace fblocked lsearch gets case lappend proc break variable llength return l
insert snmp_getid error catch clock info split array if log_user fconfigure conc
at join lreplace snmp_setany source fcopy global switch snmp_getbulk update clos
e cd for file append format read package set binary namespace scan verify_signat
ure seek while flush after vwait snmp_getnext typeahead uplevel continue hostnam
e ios_config foreach rename fileevent regexp upvar unset encoding expr load regs
ub interp history puts incr lindex lsort string
Router(tcl)#

现在一条一条的解释上面的命令及其输出:

  1. 使用 enable 命令进入特权 EXEC 模式。
  2. 使用 tclsh 命令进入 Tcl Shell 命令行,现在可以输入 Tcl 指令了。
  3. 使用 puts $tcl_version 打印当前 Tcl 版本。puts 是 Tcl 指令,相当于 C 语言中的 printf,而 $tcl_version 是 Tcl 的一个公共变量。
  4. 使用 package names 命令列出当前系统中已安装的 Tcl 扩展。要注意的一个扩展是 tbcload,Tcl 源代码被 tclcompiler 编译加密为 *.tbc 文件后,需要用此扩展来解释执行。
  5. 使用 info commands 命令来列出当前 Tcl 解释器支持的关键字。可以看到 if、for、foreach 等循环指令,操作文件与目录的 file、open、seek、read 等指令,基本的数据结构 list、array、哈希表等,字符串操作与正则表达式等等都被支持。有这样的阵容,编写强大的、全功能的 Cisco Tcl 脚本将十分方便。
官方文档:Cisco IOS Scripting with Tcl