Expect自动化交互程序
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自动化交互程序的更多相关文章
- Shell编程之Expect自动化交互程序
一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...
- Linux Expect自动化交互脚本简介
相关资料 维基百科:Expect SourceForge:The Expect Home Page TCL脚本言语简介 由于Expect是建立在TCL语言基础上的一个工具,因此首先检查一些TCL常见语 ...
- linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。
linux自动化交互脚本expect详解 更新时间:2020年10月21日 10:13:20 作者:lendsomething 这篇文章主要介绍了linux自动化交互脚本expect的相 ...
- 使用expect的自动化交互
Q:利用shell脚本实现ssh自动登录远程服务器? A:expect命令 #!/usr/bin/expect spawn ssh root@172.16.11.99 expect "*pa ...
- 自动化交互expect
自动化交互expect 一,介绍 每次服务器控制链接都需要输入密码,很麻烦,每次交互大大延长了时间 因此就有了免交互及自动化交互存在expect 二,安装 yum install expect -y ...
- linux 的 expect 自动交互
https://www.jianshu.com/p/0194cbd70d39 https://www.cnblogs.com/saneri/p/10819348.html 参考 expect是一个自 ...
- shell中expect免交互
expect前言观察ssh登录的交互现象有些程序难以避免的需要交互.你该如何解决脚本与程序的交互问题?名词解释期待, 预期, 盼望, 预料,料想, 指望, 希望, 要求,想, 认为一.概述 我们通过S ...
- python 全栈开发,Day123(图灵机器人,web录音实现自动化交互问答)
昨日内容回顾 . 百度ai开放平台 . AipSpeech技术,语言合成,语言识别 . Nlp技术,短文本相似度 . 实现一个简单的问答机器人 . 语言识别 ffmpeg (目前所有音乐,视频领域,这 ...
- 图灵机器人,web录音实现自动化交互问答
一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...
随机推荐
- 使用C#连接 MyCat 链接串
所属专栏: mycat的安装部署以及监控和运维 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014180504/article/detai ...
- Ubuntu14.04 查看安装的jetty的版本
1.首先找到start.jar , Ubuntu14.04 在/usr/share/jetty 目录下, 2.然后运行 java -jar start.jar -- version 参考
- 禁用thinkpad触摸板的方法
控制面板----硬件和声音----设备和打印机----鼠标----ThinkPad------开启触摸板(前面的勾勾去掉)
- Unity Gizmos可视化辅助工具
所有gizmo绘制需要在脚本的OnDrawGizmos或OnDrawGizmosSelected里函数完成. OnDrawGizmos在每帧调用.所有在OnDrawGizmos中渲染的gizmos都是 ...
- Java面向对象_常用类库api
StringBuffer 例: public class StringBufferDemo { /** * @param args */ public static void main(String[ ...
- (转)CentOS 7常见的基础命令和配置
CentOS 7常见的基础命令和配置 原文:http://blog.51cto.com/hujiangtao/1973566 管理服务 命令格式:systemctl COMMAND name.serv ...
- c++概念字符串操作 (转)
本文转自:http://www.jb51.net/article/37410.htm 一.char_traits 字符特征类 1)意义:包装特定串元素的通用行为界面,以便容器实现时依据特征信息而执行特 ...
- js中快速的访问某个url
在做项目中经常会遇到这样的需求,自动向后台发送统计日志,也不需要关心返回值,当然了方法有很多,其中一个方法就是使用Ajax. 在这里我要介绍的方法的原理是使用图片,给这个图片符url,这样就会自动的触 ...
- C#数据库(MySQL)帮助类
using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configura ...
- C 碎片三 运算符与表达式
一.算术运算符 算术运算符:+. -. *. /. %等 加:+ 减: - 乘: * 除: / 除数不能为0 模:% 参与模运算的数据不能为小数 二.赋值运算符 赋值运算符:= 作用: ...