使用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

转载于:https://www.cnblogs.com/manastudent/p/10191019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值