天天看点

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

[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\n"
send_user "第二个参数:$cmd\n"
puts "$password\n"
send_user "参数个数: $argc\n"
send_user "脚本名称: $argv0\n"

[root@kafka-server01 scripts]# expect 1.exp 127.0.0.1 'nihao'
第一个参数:127.0.0.1
第二个参数:nihao
123456

参数个数: 2
脚本名称: 1.exp
      
[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\r";exp_continue }
                "password" { send "$passwd\r";exp_continue }
                "root" {send "$cmd\r exit\r"}
          }
      expect eof
EOF
done <$file

[root@kafka-server01 scripts]# sh 4.sh 'free -h'
spawn ssh [email protected]
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 [email protected]
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]# 
      
上一篇: expect
下一篇: expect