zoukankan      html  css  js  c++  java
  • 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 "}
        }

    #!/usr/bin/expect
    spawn scp /etc/fstab 192.168.8.100:/app
    expect {
      "yes/no" { send "yes ";exp_continue }
      "password" { send “magedu " }
    }
    expect eof

    #!/usr/bin/expect
    spawn ssh 192.168.8.100
    expect {
      "yes/no" { send "yes ";exp_continue }
      "password" { send “magedu " }
    }
    interact
    #expect eof

    示例:变量

    #!/usr/bin/expect
    set ip 192.168.8.100
    set user root
    set password magedu
    set timeout 10
    spawn ssh $user@$ip
    expect {
      "yes/no" { send "yes ";exp_continue }
      "password" { send "$password " }
    }
    interact

    示例:位置参数

    #!/usr/bin/expect
    set ip [lindex $argv 0]
    set user [lindex $argv 1]
    set password [lindex $argv 2]
    spawn ssh $user@$ip
    expect {
      "yes/no" { send "yes ";exp_continue }
      "password" { send "$password " }
    }
    interact
    #./ssh3.exp 192.168.8.100 root magedu

    示例:执行多个命令

    #!/usr/bin/expect
    set ip [lindex $argv 0]
    set user [lindex $argv 1]
    set password [lindex $argv 2]
    set timeout 10
    spawn ssh $user@$ip
    expect {
      "yes/no" { send "yes ";exp_continue }
      "password" { send "$password " }
    }
    expect "]#" { send "useradd haha " }
    expect "]#" { send "echo magedu |passwd --stdin haha " }
    send "exit "
    expect eof
    #./ssh4.exp 192.168.8.100 root magedu

     

     

    示例:shell脚本调用expect

    #!/bin/bash
    ip=$1
    user=$2
    password=$3
    expect <<EOF
    set timeout 10
    spawn ssh $user@$ip
    expect {
      "yes/no" { send "yes ";exp_continue }
      "password" { send "$password " }
    }
    expect "]#" { send "useradd hehe " }
    expect "]#" { send "echo magedu |passwd --stdin hehe " }
    expect "]#" { send "exit " }
    expect eof
    EOF
    #./ssh5.sh 192.168.8.100 root magedu

     

     

     

     

     

     

  • 相关阅读:
    LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
    Linux第二周学习总结——操作系统是如何工作的
    通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
    期末总结
    实验报告(实验五)
    HTTPServletResponse
    Eclipse 枚举类报错
    出现Unreachable code问题的原因
    myeclipse自动保存修改代码
    ssh连接虚拟机失败解决办法
  • 原文地址:https://www.cnblogs.com/tony3154/p/10080117.html
Copyright © 2011-2022 走看看