zoukankan      html  css  js  c++  java
  • expect

    expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

    expect自动交互流程:

    spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.

    注意该脚本能够执行的前提是安装了expect
    expect用法
    -c 从命令行执行expect脚本,默认expect是交互地执行的

    expect常用命令
    spawn 交互程序开始后面跟命令或者指定程序
    expect 获取匹配信息匹配成功则执行expect后面的程序动作
    send 用于发送指定的字符串信息
    exp_continue 在expect中多次匹配就需要用到
    send_user 用来打印输出 相当于shell中的echo
    exit 退出expect脚本
    eof expect 执行结束 退出
    set 定义变量
    puts 输出变量
    set timeout 设置超时时间

    变量设置
    set 变量名 变量值
    例如:
    set user root
    打印变量
    put $user

    特殊变量
    expect也有同shell脚本里$0 $1 $2类似的特殊变量,用于接收及控制Expect脚本传参
    可以使用[lindex $argv n]接收脚本传参,n从0开始,分别表示第一个[lindex $argv 0]参数,第二个参数[lindex $argv2]... 依次类推
    $argc表示参数的个数
    $argv0表示脚本名称

    [root@kafka-server01 scripts]# cat 1.exp                        
    #!/usr/bin/expect
    
    
    set ip [lindex $argv 0]
    set cmd [lindex $argv 1]
    set password "123456"
    set timeout -1
    
    send_user "第一个参数:$ip
    "
    send_user "第二个参数:$cmd
    "
    puts "$password
    "
    send_user "参数个数: $argc
    "
    send_user "脚本名称: $argv0
    "
    
    [root@kafka-server01 scripts]# expect 1.exp 127.0.0.1 'nihao'
    第一个参数:127.0.0.1
    第二个参数:nihao
    123456
    
    参数个数: 2
    脚本名称: 1.exp
    

    shell脚本

    [root@kafka-server01 scripts]# cat /root/scripts/info 
    192.168.37.131 root 123456
    192.168.37.132 root 123456
    
    [root@kafka-server01 scripts]# cat 4.sh
    #!/bin/bash
    file=/root/scripts/info
    while read line;do
        user=$(echo $line | cut -d " " -f 2)
        ip=$(echo $line |cut -d " " -f 1)
        passwd=$(echo $line|cut -d " " -f 3)
        cmd=$*
        # echo "-------$user -- $ip -- $passwd"
        expect <<EOF
              set timeout -1
              spawn ssh $user@$ip
              expect {
                    "yes/no" { send "yes
    ";exp_continue }
                    "password" { send "$passwd
    ";exp_continue }
                    "root" {send "$cmd
     exit
    "}
              }
          expect eof
    EOF
    done <$file
    
    [root@kafka-server01 scripts]# sh 4.sh 'free -h'
    spawn ssh root@192.168.37.131
    Last login: Thu Sep 30 11:36:58 2021 from 192.168.37.130
    [root@kafka-server02 ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.8G        564M        668M         33M        597M        1.0G
    Swap:          1.5G          0B        1.5G
    [root@kafka-server02 ~]#  exit
    登出
    Connection to 192.168.37.131 closed.
    spawn ssh root@192.168.37.132
    Last login: Thu Sep 30 11:36:58 2021 from 192.168.37.130
    [root@kafka-server03 ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.8G        557M        1.0G         41M        244M        1.0G
    Swap:          1.5G          0B        1.5G
    [root@kafka-server03 ~]#  exit
    登出
    Connection to 192.168.37.132 closed.
    [root@kafka-server01 scripts]# 
    

      

  • 相关阅读:
    python中__init__和__call__的区别
    scrapy在start_requests中传入参数给parser
    crawl: error: Unrecognized output format 'json''
    判断一个点是否在多边形区域内部 / 判断一个给定位置是否位于某个城市内部
    scrapy爬取页面不完全的解决办法
    module 'tensorflow._api.v2.train' has no attribute 'rmspropoptimizer'
    tf.image.resize处理后的图片无法使用plt.imshow正常显示
    如何将tensor大于某个值为1,小于某个值为0
    Blas GEMV launch failed: m=3, n=10000
    sql 批量插入 insert
  • 原文地址:https://www.cnblogs.com/zhouzhiguo/p/15356693.html
Copyright © 2011-2022 走看看