expect本身是一个免费的编程工具,用来实现自动和交互任务进行通信,而无需人工的干预,expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。比如实现ssh自动登录通常就需要用expect来实现。

[root@shell ~]# which expect   #查看是否安装

[root@shell ~]# yum -y install expect   #安装

使用实例分解:

[root@shell ~/shell]# cat ssh
  1 #!/usr/bin/expect
  2 set timeout 30
  3 set pass "redhat"
  4 spawn ssh root@192.168.209.129
  5 expect "password:"
  6 send "$pass\r"
  7 interact
 
分解:
1.告诉shell调用expect来执行
2.设置超时时间
3.定义密码变量
4.使用expect内部命令spawn命令来启动ssh,给ssh运行进程加个壳,用来传递交互指令。
5.判断执行命令后输出的结果是否有“password:”
6.执行交互动作,输入密码,\r代表回车
7.执行完成后保持交互状态,把控制权交给控制
 
测试使用:

[root@shell ~/shell]# chmod u+x ssh

[root@shell ~/shell]# ./ssh

spawn ssh root@192.168.209.129

root@192.168.209.129's password:

Last login: Fri Mar 23 13:17:45 2012 from shell.example.com

[root@client ~]#