Expect介绍:

1、什么是Expect

Expect是一个用来实现自动化交互功能的软件套件,基于TCL的脚本编程工具语言,方便学习,功能强大。

2、为什么要使用expcet:

当今的企业运维中,自动化运维已经成为运维的主流趋势,但是在很多情况下,执行系统命令或程序时,系统会以交互的形式要求运维人员输入指定的字符串,之后才能继续执行命令,这个时候我们就需要expect交互工具来帮忙了,expect可以模拟手工交互过程,实现自动与远端程序的交互,从而达到自动化运维的目的。

Expect命令 作用
spawn spawn命令是一个在Expect自动交互程序的开始就需要使用的命令,通过spawn执行一个命令或程序,之后所有的Expect操作都在这个执行过的命令或程序进程中执行
expect 在expect自动交互程序执行的过程中,在 使用spawn命令执行一个命令或程序之后,会提示某些交互信息,expect命令的作用就是获取这些信息,查看是否和其事先指定的信息相匹配,一旦匹配上指定的内容,就执行expect后面的内容
send 

Expect中的动作命令,当expect匹配了指定的字符串之后,发送指定的字符串给系统,这些命令可以支持一些特殊的转义符号,例如:\r \n \t

还有一个类似的命令exp_send命令

exp_continue 属于一个动作命令,在一个expect命令中,用于多次匹配字符串并执行不同的动作中
send_user

类似shell的echo命令

exit 退出Expect脚本,以及退出前做一些关闭前的清理和提示等工作

示例脚本:

执行ssh命令远程获取服务器的负载值

#!/usr/bin/expect
spawn ssh root@192.168.8.31 uptime
expect {
"yes/no" {exp_send "yes\r";exp_continue}
"*password" {exp_send "123456\r"}
}
expect eof
#!/bin/bash
read -p "please input your username:" name
read -p "please input your password" pass
read -p "input your email" mail
echo -n "your name is $name,"
echo -n "your pass is $pass,"
echo "your email is $mail." #!/usr/bin/expect
spawn /bin/sh read.sh
expect {
"username" {exp_send "leon\r";exp_continue}
"*pass" {exp_send "123456\r";exp_continue}
"*mail" {exp_send "leon@123.com\r";} }
expect eof
#!/usr/bin/expect
set file [lindex $argv ] ##[lindex $argv n] 接收脚本传参 n从0开始 分别表示第一个参数[lindex $argv 0] 第二个参数 [lindex $argv 1].....
set host [lindex $argv ]
set dir [lindex $argv ]
puts "$file\t$host\t$dir"    ##puts打印变量
puts $argc             ##$argc表示参数的总个数
puts $argv0            ##$argv0 表示脚本的名字 [root@localhost scripts]# expect .exp .exp

Expect中的if条件语句

if { 条件表达式 } {

  指令

}

或

if { 条件表达式 } {

  指令

} else { 指令

}
#!/usr/bin/expect
if { $argc != } {                         #argc为传参的个数,相当于shell里面的$#
send_user "Usage expect $argv0 file host dir\n"
exit
}
set file [lindex $argv ]
set host [lindex $argv ]
set dir [lindex $argv ]
puts "$file\t$host\t$dir" #puts相当于echo

实现自动交互脚本

#!/usr/bin/expect
if { $argc != } {
send_user "Usage expect $argv0 ip command"
exit
}
set ip [lindex $argv ]
set cmd [lindex $argv ]
set password ""
spawn ssh root@$ip $cmd
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof

实现自动交互式批量发送文件或目录:

test.exp

#!/usr/bin/expect
if { $argc != } {
send_user "Usage expect $argv0 file host dir "
exit
}
set file [lindex $argv ]
set host [lindex $argv ]
set dir [lindex $argv ]
set password ""
scp -P22 -rp $file root@$host:$dir
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof

利用shell循环执行脚本

#!/bin/bash
if [ $# -ne ];then
echo "Usage:$0 file dir"
exit
fi
file=$
dir=$
for n in
do
expect test.exp $file 192.168..$n $dir
done

开发Expec提交本自动化分发公钥到所有服务器

#!/usr/bin/expect
if { $argc != } {
send_user "usage: expect expect.exp file host\n"
exit
}
set file [lindex $argv ]
set host [lindex $argv ]
set password "" spawn ssh-copy-id -i $file "-p 22 root@$host"
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof

开发shell脚本循环执行expect脚本分发公钥

#!/bin/sh
for n in
do
expect test.exp ~/.ssh/id_dsa.pub $192.168..$n
done

Expect自动化交互程序的更多相关文章

  1. Shell编程之Expect自动化交互程序

    一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...

  2. Linux Expect自动化交互脚本简介

    相关资料 维基百科:Expect SourceForge:The Expect Home Page TCL脚本言语简介 由于Expect是建立在TCL语言基础上的一个工具,因此首先检查一些TCL常见语 ...

  3. linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。

    linux自动化交互脚本expect详解  更新时间:2020年10月21日 10:13:20   作者:lendsomething     这篇文章主要介绍了linux自动化交互脚本expect的相 ...

  4. 使用expect的自动化交互

    Q:利用shell脚本实现ssh自动登录远程服务器? A:expect命令 #!/usr/bin/expect spawn ssh root@172.16.11.99 expect "*pa ...

  5. 自动化交互expect

    自动化交互expect 一,介绍 每次服务器控制链接都需要输入密码,很麻烦,每次交互大大延长了时间 因此就有了免交互及自动化交互存在expect 二,安装 yum install expect -y ...

  6. linux 的 expect 自动交互

    https://www.jianshu.com/p/0194cbd70d39 https://www.cnblogs.com/saneri/p/10819348.html  参考 expect是一个自 ...

  7. shell中expect免交互

    expect前言观察ssh登录的交互现象有些程序难以避免的需要交互.你该如何解决脚本与程序的交互问题?名词解释期待, 预期, 盼望, 预料,料想, 指望, 希望, 要求,想, 认为一.概述 我们通过S ...

  8. python 全栈开发,Day123(图灵机器人,web录音实现自动化交互问答)

    昨日内容回顾 . 百度ai开放平台 . AipSpeech技术,语言合成,语言识别 . Nlp技术,短文本相似度 . 实现一个简单的问答机器人 . 语言识别 ffmpeg (目前所有音乐,视频领域,这 ...

  9. 图灵机器人,web录音实现自动化交互问答

    一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...

随机推荐

  1. JS——制作简单的网页计算器

    用JS做了一个简易的网页计算器 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  2. 04.Spring Ioc 容器 - 刷新

    基本概念 Spring Ioc 容器被创建之后,接下来就是它的初始化过程了.该过程包含了配置.刷新两个步骤 . 刷新由 Spring 容器自己实现,具体发生在 ConfigurableApplicat ...

  3. Oracle11G的用户解锁、卸载以及基础操作

    Oracle用户解锁 [以下操作,必须以超级管理员身份登录,才能修改]oracle安装后,会默认生成很多个用户 以超级管理员身份登录,请注意,其中的空格符:[ sys是一个超级管理员,有最大的权限,d ...

  4. C++中的swap函数

    最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符 template <class T> void swap ( T& a, T& b ) { T c(a); a ...

  5. ACdream 1427—— Nice Sequence——————【线段树单点更新,区间查询】

    Nice Sequence Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Su ...

  6. hibernate课程 初探单表映射1-5 hibernate第一个demo

    hibernate 开发步骤:(hibernate4.2+mysql6.0) 1 hibernate配置文件(hibernate.cfg.xml) 2 持久化类 3 对象-关系映射文件 4 hiber ...

  7. 会话跟踪之Cookie

    一:简介 Cookie主要用来存储用户信息,追踪用户会话.web客户端访问服务端直接采用的协议是Http,Http协议是一种无状态协议,无状态表现在不能够保留用户访问状态,无法记录用户信息.每一次的请 ...

  8. 第2章 TCP-IP的工作方式

    第2章 TCP-IP的工作方式 TCP/IP协议系统 为了实现TCP的功能,TCP/IP的创建者使用了模块化的设计.TCP/IP协议系统被分为不同的组件,每个组件分别负责通信过程的一个步骤.这种模块化 ...

  9. Vue.js(2.x)之插值

    看了一些友邻写的文章,不少是基于1.0版本的,有些东西在2.x版本应该已经废除了(如属性插值.单次插值在2.x版本上运行根本不执行).对于不理解的东东,找起资料来就更麻烦了.不得不老老实实线下测试并整 ...

  10. 2013 QConf上海软件开发大会总结

    带着工作中的一些疑问,我参加了在上海举办的QConf 全球软件开发大会.会议以主题的形式按分会场召开,我主要选择知名网站案例分析.大数据处理技术.高效能团队建设和金融系统架构与设计四个主题内容.三天会 ...