zoukankan      html  css  js  c++  java
  • 使用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
    "; exp_continue } 
        "password:" { send "$passwd
    " } } 
    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 " 发送需要交互的值 yes 并以回车结束

    本文由个人 hexo 博客 co2fe.com 迁移
    date: 2018-09-02 09:12:01

  • 相关阅读:
    Fedora 23 配置
    小小的告别一下这个博客
    markdown测试
    ihhh题解
    【BZOJ】1998: [Hnoi2010]Fsk物品调度
    【BZOJ】2563: 阿狸和桃子的游戏
    【BZOJ】3712: [PA2014]Fiolki
    【BZOJ】2333: [SCOI2011]棘手的操作
    我的vimrc
    Ubuntu Gnome 14.04.2 lts 折腾笔记
  • 原文地址:https://www.cnblogs.com/manastudent/p/10191019.html
Copyright © 2011-2022 走看看