Linux工具——expect工具介绍

1,088 阅读1分钟

expect自动化实现与交互系统交互的场景,代替人力输入命令,可以方便地批量执行需要交互输入命令的任务。

set timeout 10 //脚本的超时时间
set varname [lindex $argv 0]  //获取外部输入的第一个参数,传给变量varname 
spawn cmd //启动一个进程 
expect "xxx" //等待交互式系统返回的字符串
send "yyy" //expect期待的字符串出现时,发送字符串到交互式系统 
interact //保持交互状态,控制权交给控制台,比如登陆完成以后留在终端等待用户操作响应

举个例子,新建login.expect

#!/usr/bin/expect
  
set timeout 2
spawn ssh [lindex $argv 0]@[lindex $argv 1] -p [lindex $argv 2]
expect {
    "(yes/no)?" { send "yes\n"; exp_continue }
    "password:" { send "[lindex $argv 2]\n" }
    "Password>:" { send "[lindex $argv 2]\n" }
}
interact

这样可以完成自动登录:

./login.expect username hostip passwd 

如果出现spawn_id: spawn id exp6 not open while executing这种错误,因为spawn不是shell命令,不能以 sh login.expect执行expect脚本。