相关资料

维基百科:Expect

SourceForge:The Expect Home Page

TCL脚本言语简介

由于Expect是建立在TCL语言基础上的一个工具,因此首先检查一些TCL常见语法。

  • 变量

    在Expect中一般用于保存hostname/password/hostname
// 定义一个变量
set username "leo"
set hostname "xx.domain" // 获取命令行参数(与bash不同的是第一个参数index为0)
set hostname [lindex $argv 0] //获取第一个参数,存入hostname变量中
set password [lindex $argv 1] //获取第二个参数,存入password变量中
  • 数组

    在Expect中一般用于保存服务器列表,显示并供用户选择
// 定义一个数组
set host_list(0) {host1 127.0.0.1}
set host_list(1) {host2 192.168.1.1}
set host_list(3) {host3 8.8.8.8} //获取数组长度
set len [array size host_list]
  • 获取用户输入

    在Expect中一般接受用户输入选择,如密码、服务器等
system stty -echo    //关闭终端回显,用于输入密码
send_user "please input password:" //发送给用户,提示输入密码
expect_user -re "(.*)\n" //获取用户输入
set password $expect_out(1,string) //将用户输入用password变量保存
system stty echo //打开终端回显
  • if条件分支

    在Expect中用于逻辑判断
[string compare $host "123"]    //判断变量是否相等,相等返回0,不相等返回1

set host [lindex $argv 0]    //获取第一个参数
if ![string compare $host ""] { //此处花括号前必须有一个空格,具体请参考TCL语言规范
//如果host变量为空字符串
} if {[string compare [string toupper $choose] "N"] == 0} {
//如果choose变量为"N"
} elseif {[scan $choose {%[0-9]} choose] == 0} {
//如果choose不是数字,scan用户匹配,详情参考TCL语法
} elseif { $choose < 0 || $choose >= $len } {
exit //退出
}
  • for循环

    在Expect可以用作显示数据
set len [array size host_list]
for {set index 0} {$index < $len} {incr index} {
puts "$index -> $host_list($index)"
}
// incr为自增关键字
// puts用于输出到用户,类似于send_user

Expect应用介绍

  • ssh自动登录
set timeout 10    //设置timeout时间为10秒钟
spawn ssh $username@$hostname //执行ssh命令,登陆远程服务器
expect { //匹配服务返回信息
"yes/no" { send "yes\r"; exp_continue } //第一次登陆服务器一般会提示保存公钥
"password" { send "$password\r"; exp_continue } //提示输入密码
"$" { send "hostname\r" } //终端下发送hostname
"Permission denied" { send_user "Permission denied (publickey,password)."; exit}
incorrect {puts "Invalid account or password!"; exit }
timeout { puts "Connection to $hostname timed out!"; exit }
eof { puts "Connection to $hostname failed: $expect_out(buffer)"; exit}
}
interact //登陆后的环境直接交给用户
// exp_continue可以解决为for/while循环的continue,Expect可以看做重新执行expect匹配
// exit是直接退出
  • 接受窗口改变信号

    如果使用expect登陆后,使用screen或者tmux,在用户终端大小调整情况下,因为窗口大小改变信号为同步到远程服务器会导致内容错乱。
trap {
set rows [stty rows]
set cols [stty columns]
stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH

Linux Expect自动化交互脚本简介的更多相关文章

  1. Linux Expect自动交互脚本

    https://likegeeks.com/expect-command/ In the previous post, we talked about writing practical shell ...

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

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

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

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

  4. Expect自动化交互程序

    Expect介绍: 1.什么是Expect Expect是一个用来实现自动化交互功能的软件套件,基于TCL的脚本编程工具语言,方便学习,功能强大. 2.为什么要使用expcet: 当今的企业运维中,自 ...

  5. Linux Shell——bash shell 脚本简介

    bash shell 脚本简介 shell 运行环境 如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash s ...

  6. linux expect 即exp脚本交互功能【原】

    场景 expect命令用于任何自动化互动的过程. send – 发送字符串到进程 expect – 等待来自进程的特定的字符串 spawn – 启动命令 安装 expect一开始100%不存在, 手动 ...

  7. Linux - expect自动化远程登录脚本

    简单模式: #!/usr/bin/expect -f spawn ssh root@192.168.0.1 expect "*assword*" send "root\r ...

  8. Linux - 通过expect工具实现脚本的自动交互

    目录 1 安装expect工具 2 expect的常用命令 3 作用原理简介 3.1 示例脚本 3.2 脚本功能解读 4 其他脚本使用示例 4.1 直接通过expect执行多条命令 4.2 通过she ...

  9. 自动交互脚本之expect使用记录

    之前一直没怎么用这个命令,意外用了一下,还不错,那这个是干嘛的呢 我们或多或少会远程登录其他服务器,需要执行某项任务,通常需要手动接入,输入密码啊,等等 那我们如何有效的自动执行呢,expect可以解 ...

随机推荐

  1. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  2. Redis[三] @Hash 哈希

    Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型 在Redis中的哈希值,可存储超过400十亿键值对. redis 提供了2套操纵 一种是批量 一种是非批量 假设需 ...

  3. 微信中通过页面(H5)直接打开本地app的解决方案

    简述 微信中通过页面直接打开app分为安卓版和IOS版,两个的实现方式是完全不同的. 安卓版实现:使用腾讯的应用宝,只要配置了“微下载”之后,打开链接腾讯会帮你判断本地是否已经安装了app,如果本地安 ...

  4. 三、nginx实现反向代理负载均衡

    1.反向代理 需求: 两个tomcat服务通过nginx反向代理 nginx服务器:192.168.101.3 tomcat1服务器:192.168.101.5 tomcat2服务器:192.168. ...

  5. H - transaction transaction transaction

    https://vjudge.net/contest/184514#problem/H 题意: 一个商人为了赚钱,在城市之间倒卖商品.有n个城市,每个城市之间有且只有一条无向边连通.给出n个城市的货物 ...

  6. 49、html基础认识&常用标签(1)

    从今天期我们进入前端的学习,先学习html,没有任何需要逻辑需要烧脑,只需要记忆.练习.练习.练习. 一.HTML初识 1.web服务本质 import socket def main(): sock ...

  7. angularjs-1.3代码学习-$parse

    这次我们来看一下angular的Sandboxing Angular Expressions.关于内置方法的,核心有两块:Lexer和Parser.其中大家对$parse可能更了解一点.好了不多废话, ...

  8. 关于JS正则——你知道多少?

    正则表达式 1. 使用正则 创建正则表达式有两种方式,一种是以字面量方式创建,另一种是使用RegExp构造函数来创建. var expression = / pattern / flags; var ...

  9. Spring Cloud官方文档中文版-客户端负载均衡:Ribbon

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_spring_cloud_netflix 文中例子我做了一些测试在:h ...

  10. ★不容错过的PPT教程!

    IT工程师必须学会的计算机基础应用之一--PPT! 28项大神级PPT制作技术,学会后让你变成PPT高手哦!更多实用教程,请关注@IT工程师 !