Expect 的基础知识 Expect 是由 Don Libes 基于 Tcl 语言开发的,并被广泛应用于交互式操作和自动化测试的场景之中,它尤其适用于需要对多台服务器执行相同操作的环境中,可以大幅度得提高系统管理人员的工作效率。目前,大部分 Unix/Linux 系统安装有 expect. 万一系统中没有,可以从 下载相应的包安装。也可以使用yum或者apt-get进行安装。 Expect 作为基于 Tcl 的高级语言,增加了一些特殊的语法。传统意义上的 Expect 是以 Tcl 扩展包的形式出现的,任何 Tcl 语言编写的应用程序都可以加载 Expect 功能;此外,Expect 已经以模块的方式移植到了 Perl 和 Python 语言中,因此用户同样可以在 Perl 和 Python 脚本中利用 Expect 强大的交互功能。 Send,expect 和 spwan 是 Expect 语言最基本的命令。其中,send 命令会发送字符串给指定进程(process); expect 命令会等待接受该进程返回的结果并且会根据返回的字符串来决定下一步的操作;而 spwan 命令可以发起一个进程的运行。send命令接收一个字符串作为参数发送给指定进程。如 send "hello world\n" send 会送出字符串“Hello world”( 不带引号 )。如果 Expect 早已经开始与某一个程序进行交互,那么这个字符串将被发送给该程序;一般是发送到标准输出的, expect 命令则等待一个响应,通常是来自于 Expect 正在与之交互的进程,或者来自于标准输入设备;它会等待一个指定的字符串或者满足给定的正则表达式的任何字符串。如: #!/usr/bin/expect -f expect "hi\n" send "hello world\n" 这个文件名为hello,你执行./hello , 它会等待来自标准输入设备的响应,直到用户输入 hi 并回车,它才会发送”hello world”到标准输出设备,然后加一个回车, 然后结束 expect 脚本的运行。但是,如果用户没有输入 hi 并回车,那么 expect 会继续等待”hi\n”;输入其他的字符并不会影响到 expect 的工作。通常情况下,expect 会一直等会输入,直到最终超时退出。此外, expect 还支持使用正则表达式来预防 expect 匹配到未预想到的输入数据。 spawn 命令会调用另一个程序。它的第一个参数是要启动程序的名字;剩余的参数则会被传递给该程序做为参数。比如
|