expect 是一个自动交互功能的工具。expect 是开了一个子进程,通过 spawn 来执行 shell 脚本,监测到脚本的返回结果,通过 expect 判断要进行的交互输入内容。
expect 基本命令
spawn 调用要执行的命令
expect 等待命令提示信息的出现,用于捕捉用户输入的提示
send 发送需要交互的值,替代了用户手动输入内容
set 设置变量值
interact 执行完成后保持交互状态,把控制权交给控制台。如果没有这一句登录完成后会退出,而不是留在远程终端上
expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止
expect 脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了
脚本演示
登陆到远程服务器 * 文件名称为 example_1.sh
#!/usr/bin/expect
set timeout 5
set server [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
spawn ssh -l $user $server
expect {
"(yes/no)" { send "yes\r"; exp_continue }
"password:" { send "$passwd\r" } }
expect "*Last login*" interact
./example_1.sh 192.168.1.68 root 123456
#!/usr/bin/expect 声明使用 expect 解释脚本
set timeout 5 设置超时时间为 5 秒,如果要执行的 shell 命令很长可以设置超时时间长一些
set server [lindex $argv 0] 将命令行第一个参数赋值到 server 变量上
expect {} 多行期望,匹配到哪条执行哪条,这里的脚本执行后预期结果是不固定的,有可能是询问是yes/no,有可能是去输入密码,所以可以使用 expect{}
send "yes\r" 发送需要交互的值 yes 并以回车结束
本文由个人 hexo 博客 co2fe.com 迁移 date: 2018-09-02 09:12:01