expect 自动化控制命令

expect 的核心是 spawn expect send set

spawn 调用要执行的命令
expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:
send 发送需要交互的值,替代了用户手动输入内容
set 设置变量值
interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。
expect eof 这个一定要加,与 spawn 对应表示捕获终端输出信息终止,类似于 if....endif

expect 脚本必须以 interact 或 expect eof 结束,执行自动化任务通常 expect eof 就够了。

设置 expect 永不超时
set timeout -1

设置 expect 300 秒超时,如果超过 300 没有 expect 内容出现,则退出
set timeout 300

例子: 自动登录远程服务器执行ifconfig命令

#!/bin/bash
    passwd='Hello2014'
    /usr/bin/expect <<-EOF
    set time 30
    spawn ssh root@192.168.126.131
    expect {
    "*yes/no" { send "yes
"; exp_continue }
    "*password:" { send "$passwd
" }
    }
    expect "*#"
    send "ifconfig
"
    expect "*#"
    send "exit
"
    interact
    expect eof
    EOF
Code

参考文档:http://blog.slogra.com/post-601.html

原文地址:https://www.cnblogs.com/Mrhuangrui/p/4762787.html