• linux expect spawn的用法


    expect介绍

     借助Expect处理交互的命令,可以将交互 过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成.尤其适用于需 要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率 

    expect安装 

    [root@docker-01 ~]# yum -y install expect

    expect 语法

    expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 
    
        选项 
    
              -c:从命令行执行expect脚本,默认expect是交互地执行的   
    
                    示例:expect -c 'expect "
    " {send "pressed enter
    "} 
    
             -d:可以输出输出调试信息   
    
                   示例:expect  -d ssh.exp
    
              expect中相关命令 
    
                    spawn:启动新的进程 
    
                    send:用于向进程发送字符串 
    
                    expect:从进程接收字符串 
    
                    interact:允许用户交互
    
                   exp_continue  匹配多个字符串在执行动作后加此命令 
     
         expect最常用的语法(tcl语言:模式-动作) 
    
            单一分支模式语法: 
    
                  expect “hi” {send “You said hi
    "}           匹配到hi后,会输出“you said hi”,并换行
    
            多分支模式语法: 
    
                  expect "hi" { send "You said hi
    " }  "hehe" { send “Hehe yourself
    " }  "bye" { send “Good bye
    " } 
    
            匹配hi,hello,bye任意字符串时,执行相应输出.等同如下:
    
                 expect { "hi" { send "You said hi
    "} "hehe" { send "Hehe yourself
    "} "bye" { send “Good bye
    "} } 

     自动拷贝文件到远程主机

    执行expect 不能以bash file 的方式来执行        (开启一个子shell进程)
    
        必须通过  chmod +x file     ./file  这样的方式    (不会开启子shell进程,只在当前shell环境中执行)
    
        expect 如果只交互一次如拷贝文件   结尾就使用                                            expect eof 
    
                  如果需要连续交互如登录远程主机执行各种命令结尾就需使用           interact
    [root@docker-01 ~]# cat login
    #!/usr/bin/expect
    set timeout 30
    spawn ssh root@192.168.1.221
    expect "*password:"
    send "123456
    "
    expect "#"
    send "systemctl restart docker
    "
    expect eof
    解释:
    
    1.#!/usr/bin/expect :需要先安装软件,然后来说明用expect来执行
    
    2.spawn ssh root@192.168.1.221 :spawn是进入expect环境后才可以执行的expect内部命令,用来执行它后面的命令。
    
    3.expect "*password:" :也是expect的内部命令,用来解惑关键的字符串,如果有,就会立即返回下面设置的内容,如果没有就看是否设置了超时时间。
    
    4.send "123456
    ":这时执行交互式动作,与手工输入密码等效,在expect截获关键字之后,它就会输入send后面的内容。
    
    5.interact :执行完毕后把持交互状态,把控制台,这时候就可以进行你想要进行的操作了。如果没有这一句,在登陆完成之后就会退出,而不是留在远程终端上。
  • 相关阅读:
    一文读懂高性能网络编程中的I/O模型
    QQ的成功,远没有你想象的那么顺利和轻松
    解密“达达-京东到家”的订单即时派发技术原理和实践
    以网游服务端的网络接入层设计为例,理解实时通信的技术挑战
    老罗最新发布了“子弹短信”这款IM,主打熟人社交能否对标微信?
    最火移动端跨平台方案盘点:React Native、weex、Flutter
    ogre3D学习基础11 -- 交换两个场景管理器
    STL学习笔记2--list
    STL学习笔记1--vector
    设计模式 --- 学习总结
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12336548.html
Copyright © 2020-2023  润新知