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

     

     

     

     

     

     

  • 相关阅读:
    一些易忘记的常识HTML,不定期添加
    base64 encoder/decoder for objectivec编码及解码(转)
    用XCode 开发基于网络库ACE的应用
    迅雷/旋风地址转换原理分析(转)
    主题:非常常用的Mac快捷键
    没事干测试ObjC数据类型
    These are the support and errata files for titles formerly published by Wrox Press Limited.
    iOS 开发者应该知道的 ARM 结构(转自apple4us)
    [创建型模式] Factory
    [创建型模式] Builder
  • 原文地址:https://www.cnblogs.com/tony3154/p/10080117.html
Copyright © 2011-2022 走看看