• Linux--使用expect进行自动交互


    在linux下进行一些操作时,有时需要与机器进行一些交互操作,比如切换账号时输入账号密码,传输文件时输入账号密码登陆远程机器等,但有时候这些动作需要在shell脚本中进行,这个时候就可以使用expect来进行自动的交互操作,从而避免需要人工干预引起的脚本中断执行。

    expect的核心命令:spawn expect send set

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

    例子:建一个scp.sh脚本,用来传输文件

    #!/bin/sh
    svr="9.84.214.35"
    
    expect <<!
    spawn scp -r xman@$svr:/db2info.csv /tmp/db2info.txt
    expect {
            "(yes/no)?"
                    {
                            send "yes
    "
                            expect "*assword:" {send "1qaz2wsx
    "} 
                    } 
            "*assword:"
                    {
                            send "1qaz2wsx
    "
                    } 
    } 
    expect "100%"
    expect eof
    !

    执行./scp.sh就会使用账户xman,去登陆远程机器,这是终端会给出提示信息问是否继续Yes/No? 如果yes就输入密码,登陆成功后scp命令就开始传文件。其中expect{}里面的代码就是预判断终端输出的内容里是否有(yes/no)?,如果有就自动输入yes,(send "yes ");然后再判断后面的输出里是否含有*password:",如果有就自动输入预置的密码1qaz2wsx。从而达到自动进行交互的目的。

    除了用 expect <<!  !方式(here document方式)在sh中调用expect外,当然也可以用expect -c "" 的方式在sh脚本里调用expect命令。 

    
    
  • 相关阅读:
    django实战-XX学院选课系统
    django学习记录
    WEB前端--CSS样式优先级
    python中__str__和__repr__的区别
    转载--SqlAlchemy ORM 学习
    转载---Python模块学习optparse 处理命令行参数
    转载--Python之路,进程、线程、协程篇(原文地址:http://www.cnblogs.com/alex3714/articles/5230609.html)
    python学习---模拟人生
    python学习---购物商场与ATM
    解决"回调地狱"的发展过程
  • 原文地址:https://www.cnblogs.com/jingwei/p/4863554.html
Copyright © 2020-2023  润新知