【系统管理】_expect的用法

Expect是一种将现有的实用程序组合起来的胶合剂,通常考虑的是如何使Expect利用系统现有的工具解决问题而不是如何在Expect中解决问题。

Expect主要应用涉及商用软件产品。很多这类的产品都会提供某种命令行工具,但这些工具缺乏脚本编程的能力,只是为了帮助用户管理产品,而商家通常不会在如何实现一个稳定性好的脚本语言上耗费很多精力。Expect脚本中可以包含shell,查询环境变量,通过执行某些Unix命令获得更多的信息,然后在产品所带命令行接口中加入必须的信息,来完成用户的目标。在产品命令行接口中查询相关信息,该脚本可以在多种选择中智能地决定当前应该做什么比较合适。

每次Expect操作完成,运行结果将保存在本地环境变量 $expect_out 中。这允许脚本收集这些信息给用户以相应的反馈,同时也允许根据当前情况发送相对应的指令。

Expect通常用来建立一组测试套件,可以用在程序、组件或者嵌入式系统中。DejaGnu就是利用Expect写成的一组测试套件。它被大量地应用于测试 gcc,对于远程目标的测试例如嵌入式开发也是非常合适的。

你可以利用一种叫作"autoexpect"的工具,自动生成expect脚本。这个工具观测你的操作,并利用启发性知识生成expect脚本。尽管生成的代码可能会很长,含义上有点模糊,你可以修改生成的脚本使它成为你需要的代码。

一个简单的脚本程序例子就能实现自动的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

猜你喜欢

转载自www.cnblogs.com/shareformlwh/p/12466580.html