一个简单的脚本程序例子就能实现自动的telnet会话:
# 假定 $remote_server, $my_user_id, $my_password, 和$my_command 已经读入。
# 向远程服务器请求打开一个telnet会话,并等待服务器询问用户名
spawn telnet $remote_server
expect "username:"
# 输入用户名,并等待服务器询问密码
send "$my_user_id\r"
expect "password:"
# 输入密码,并等待键入需要运行的命令
send "$my_password\r"
expect "%"
# 输入预先定好的密码,等待运行结果
send "$my_command\r"
expect "%"
# 将运行结果存入到变量中,显示出来或者写到磁盘中
set results $expect_out(buffer)
# 退出telnet会话,等待服务器的退出提示EOF
send "exit\r"
expect eof
另一个脚本程序例子,自动建立FTP会话
# 向远程服务器请求打开一个FTP会话,并等待服务器询问用户名
spawn ftp $remote_server
expect "username:"
# 输入用户名,并等待服务器询问密码
send "$my_user_id\r"
expect "password:"
# 输入密码,并等待FTP提示符的出现
send "$my_password\r"
expect "ftp>"
# 切换到二进制模式,并等待FTP提示符的出现
send "bin\r"
expect "ftp>"
# 关闭ftp的提示符
send "prompt\r"
expect "ftp>"
# 下载所有文件
send "mget *\r"
expect "ftp>"
# 退出此次ftp会话,并等待服务器的退出提示EOF
send "bye\r"
expect eof
[编辑]用法说明
Expect是一种将现有的实用程序组合起来的胶合剂,通常考虑的是如何使Expect利用系统现有的工具解决问题而不是如何在Expect中解决问
题。
Expect主要应用涉及商用软件产品。很多这类的产品都会提供某种命令行工具,但这些工具缺乏脚本编程的能力,只是为了帮助用户管理产品,而商家通常
不会在如何实现一个稳定性好的脚本语言上耗费很多精力。Expect脚本中可以包含shell,查询环境变量,通过执行某些Unix命令获得更多的信
息,然后在产品所带命令行接口中加入必须的信息,来完成用户的目标。在产品命令行接口中查询相关信息,该脚本可以在多种选择中智能地决定当前应该做什么
比较合适。
每次Expect操作完成,运行结果将保存在本地环境变量 $expect_out 中。这允许脚本收集这些信息给用户以相应的反馈,同时也允许根据当
前情况发送相对应的指令。
Expect通常用来建立一组测试套件,可以用在程序、组件或者嵌入式系统中。DejaGnu就是利用Expect写成的一组测试套件。它被大量地应用
于测试 gcc,对于远程目标的测试例如嵌入式开发也是非常合适的。
你可以利用一种叫作"autoexpect"的工具,自动生成expect脚本。这个工具观测你的操作,并利用启发性知识生成expect脚本。尽管生
成的代码可能会很长,含义上有点模糊,你可以修改生成的脚本使它成为你需要的代码。