Tcl pronounced "tickle", is a fairly simple and
straight forward computer language similar to a
shell language. Tcl stands for Tool Command
Language.
Tk is a set of libraries that can be used by a string
oriented computer language such as Tcl to draw
X-windows "widgets" such as list boxes, menus, and
so on. Tk is most often used with Tcl, but will
also work with other languages such as perl and
scheme.
expect is an extended version of Tcl which can serve as a
"robot operator" to run certain kinds of programs,
in particular programs like Landmark's bcm2d and
bcm3d and zap.
http://hi.baidu.com/xiuxiu5484/blog/item/c8be973fd1a403e455e72317.html
http://testing.blog.51cto.com/530290/155908
http://www.cnitblog.com/houcy/archive/2008/08/23/48288.html
Expect被设计成专门完成和交互式程序的交互。一个Expect程序员可以写一个脚本来描述程序和用户的对话。接着Expect程序可以非交互的运行“交互式”的程序。
Tcl实际上是一个子程序库,这些子程序库可以嵌入到程序里从而提供语言服务。 最终的语言有点象一个典型的Shell语言。里面有给变量赋值的set命令,控制程序执行的if,for,continue等命令,还能进行普通的数学和字符串操作。当然了,还可以用exec来调用Unix程序。所有这些功能,Tcl都有。
Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令。spawn命令激活一个Unix程序来进行交互式的运行。 send命令向进程发送字符串。expect命令等待进程的某些字符串。 expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。expect还能理解一些特殊情况,如超时和遇到文件尾。
expect的定义:
expect patlist1 action1 patlist2 action2.....
该命令一直等到当前进程的输出和以上的某一个模式相匹配,或者等 到时间超过一个特定的时间长度,或者等到遇到了文件的结束为止。
(可以看到与awk的相似,同样是模式,动作)
如果patlist是eof或者timeout,则发生文件结束或者超时时才执行相应的action.一般超时的时值是10秒,但可以用类似"set timeout 30"之类的命令把超时时值设定为30秒。
下面的一个程序段是从一个有关登录的脚本里面摘取的。abort是在脚本的别处定义的过程,而其他的action使用类似与C语言的Tcl原语。
expect "*welcome*" break
"*busy*" {print busy;continue}
"*failed*" abort
timeout abort
模式是通常的C Shell风格的正规表达式。模式必须匹配当前进程的从上一个expect或者interact开始的所有输出(所以统配符*使用的非常的普遍)。但是,一旦输出超过2000个字节,前面的字符就会被忘记,这可以通过设定match_max的值来改变。
expect可以使用单引号和双引号,也可以不用引号,为了减少错误和更好的理解,一般使用双引号来引用字符串。
字符可以使用反斜杠来单独的引用,反斜杠也被用于对语句的延续,如果不加反斜杠的话,语句到一行的结尾处就结束了。
#表示注释
获取参数 [lindex $argv 0] :表示获取第一个参数 (或者:[index $argv 1])
文件第一句:
#! /usr/bin/expect