使用expect实现shell自动交互
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