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. /sbin/int的启动及后续进程的启动_3

    转载自: http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 半年前,我写了<计算机是如何启动的?>,探讨BIOS ...

  2. 机器学习框架ML.NET学习笔记【4】多元分类之手写数字识别

    一.问题与解决方案 通过多元分类算法进行手写数字识别,手写数字的图片分辨率为8*8的灰度图片.已经预先进行过处理,读取了各像素点的灰度值,并进行了标记. 其中第0列是序号(不参与运算).1-64列是像 ...

  3. mac下远程win8.1时提示"桌面连接无法验证您希望连接的计算机的身份"的解决办法

    在os x下使用远程桌面到win8.1,总出现“远程桌面连接无法验证您希望连接的计算机的身份”的提示. 解决方法:1.网上各种解释,包括防火墙是否打开,是否去掉“仅允许运行使用网络级别身份验证的远程计 ...

  4. Arduino连接pH计

    关于arduino连接ph,核心的东西就是对ph传感器返回的信号值进行一系列的操作,注意因为返回的信号很弱,而且外部环境对其影响也很大,所以需要在电路设计上加入一些功能,比如信号放大.滤波等,电路设计 ...

  5. 移动端,点击a标签链接的pdf报错 Resource interpreted as Document but transferred with MIME type application/pdf

    源码: <a href="11.pdf" class="actcont_a fl report_a" style="display: block ...

  6. Counting blessings can actually increase happiness and health by reminding us of the good things in life.

    Counting blessings can actually increase happiness and health by reminding us of the good things in ...

  7. thinkphp搜索实现

    视图: <html lang="zh-cn"><head> <meta charset="UTF-8"><title& ...

  8. Struts2笔记2

    一.请求参数封装 1.属性驱动:     (1).无实体类情况:属性和动作类在一起         a.编写jsp页面,提交数据,例如name和age            <form acti ...

  9. iOS核心动画高级技巧之CALayer(一)

    iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...

  10. SQL Server 08版与14版处理重复行的方式

    在项目中,利用循环拼接成了插入多行数据的SQL语句: Insert into table(col1,col2)vaules(value11,value21); Insert into table(co ...