tcl/tk/expect(转)

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值