tcl语言属于脚本语言的一种。
1.1 TCL语言简介
Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。
TCL简单易学,功能强大。TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。
是tool command language的缩写,发音为"tickle”,实际上包含了两个部分:一个语言和一个库。
首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些交互程序如文本编辑器、调试器和shell。它有一个简单的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。
其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。
Tcl和其他编程语言例如C不同,它是一种解释语言而非编译语言。Tcl程序由一系列Tcl命令组成,在运行时由Tcl解释器解释运行。
解释执行的语言因为解释器不需要直接同机器码打交道所以实现起来较为简单、而且便于在不同的平台上面移植,这一点从现在的编程语言解释执行的居多就能看出来
编译执行的语言因为要直接同CPU 的指令集打交道,具有很强的指令依赖性和系统依赖性,但编译后的程序执行效率要比解释语言要高的多,象现在的 Visual C/C++、Delphi 等都是很好的编译语言。
Tcl的一个重要特性是它的扩展性。如果一个程序需要使用某些标准Tcl没有提供的功能,可以使用c语言创造一些新的Tcl命令,并很容易的融合进去。
Tk是一系列令Tcl易于编写图形用户接口GUI的命令和过程。另一个流行的扩展包是Expect.,Expect提供了通过终端自动执行命令的能力,例如(passwd、ftp、telnet等命令驱动的外壳)。
tcl 是一种类C的脚本语言,相比较之下有其自身特点:
1 可移植性好。不依赖底层协议
2 支持多种平台。Tcl 是用 C 语言开发的。它现在可运行在 Unix,Windows 和 Macintosh 等各种平台上。
3 较高的执行效率
4 简单易学
5 与操作系统集成
总之,“小巧,易学,高效,跨平台执行”是 Tcl 语言特点的集中体现。
tcl 语言是一种类C的解释执行的语言,本身不依赖与机器码,所以执行效率高,同时支持多种平台,移植性也好。
tcl本身比较 容易掌握,应用范围很广。我们知道的,界面测试和测试都使用很多。
对于tcl本身不能实现的功能,通过c语言创建行命令,然后融合就可以实现,这个也就是说扩展性上也很好。常用的有TK和expect ,后者用于终端自动执行命令行。
TCL脚本框架:
连接设备部分
spawn telnet 10.255.255.240 登陆设备
expect "Username:" 期望输入用户名
send "admin\n"
expect "Password:"
send "XXXXXX\n"
expect "3750>"
send "en\n"
expect "Password:"
send "XXXXXX\n"
expect "3750#"
send "ping 192.168.100.100\n"
expect "3750#"
send "config t\n"
expect "#"
send "ip route 123.2.1.1 255.255.255.255 null0\n"
expect "#"
使用自定义函数
使用的全局变量
#global veriables
set g_dbgflag 1
set g_devip "192.168.1.222"
set g_user "root"
主程序执行
批命令执行
# $Id$
# Construct different source MAC address packets, and send them to switch.
proc src_mac_attack {mac} {
set rc [exec echo "src MAC attack packet $mac" \
| nemesis ethernet -M 00:01:02:03:04:05 -H $mac -T 0x0800 -P -]
return $rc
}
for {set i 1} {$i < 256} {incr i} {
set mac [constructMac $i]
src_mac_attack $mac
}
# $Id$
# Construct different source MAC address packets, and send them to switch.
proc src_mac_attack {mac} {
set rc [exec echo "src MAC attack packet $mac" \
| nemesis ethernet -M 00:01:02:03:04:05 -H $mac -T 0x0800 -P -]
return $rc
}
for {set i 1} {$i < 256} {incr i} {
set mac [constructMac $i]
src_mac_attack $mac
}