相关资料

维基百科: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. js中匿名函数

    今天碰到一道题,里面既包含了匿名函数的知识,也包含了预编译,函数的传参(形参),感觉迷迷糊糊的,所以想着做个总结. var foo={n:1}; (function(foo){ console.log ...

  2. Java面向对象的理解

    Java是一门面向对象的编程语言(Object Oriented Programming,OOP), 这个句话是每个学习Java的程序员应该先深刻理解的一句话. 我们之所以将自自然界分解,组织成各种概 ...

  3. Visual Studio 2013怎么关闭智能提示?

    visual studio的智能提示加快了程序员写代码的速度,但是却让程序员更加的依赖编辑器,离开了智能提示,会忘记很多代码~,甚至会问自己,我还是程序员吗? 下面给出关闭visual studio智 ...

  4. 我理解的Java中重载与重写

    程序中我们用方法来实现对对象的操作,但是对象可能有不同的数据类型,这时候对不同的数据类型,进行相同的操作,我们就可以用到方法的重载,即方法名相同,但是具有不同的参数列表. 方法的重载可以根据传递参数的 ...

  5. [2015-11-10]分享一个调用msbuild生成解决方案并打包发布的批处理脚本

    最近工作成果之一,特此记录. 用于打包的批处理脚本 注意设置 path/to/your/solutionfile.sln 指向vs的解决方案文件. setlocal enabledelayedexpa ...

  6. 比较三个 CSS 预处理器:Sass、LESS 和 Stylus(下)

    五.Mixins (混入) Mixins 有点像是函数或者是宏,当你某段 CSS 经常需要在多个元素中使用时,你可以为这些共用的 CSS 定义一个 Mixin,然后你只需要在需要引用这些 CSS 地方 ...

  7. 32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)

    32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看) 昨天,大家可能都看了代码了,不知道昨天有没有在汇编代码的基础上,实现注入计算器. 如果没有,今天则会讲解,不过建议 ...

  8. Word直接发布新浪博客(以Wo…

    原文地址:Word直接发布新浪博客(以Word 2013为例)作者:paulke2011 注意:这篇博客直接由Word 2013发出!这虽然也算是一个教程,但更多的是一个试验品. 老早就知道Word有 ...

  9. 入门-什么是webshell?

    webshell是什么? 顾名思义,"web" - 显然需要服务器开放web服务,"shell" - 取得对服务器某种程度上操作权限. webshell常常被称 ...

  10. 【★】深入BGP原理和思想【第…

    前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻.和我研究高等数学一样,越深入就会发现越多的问题与不合理之处.尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们" ...