相关资料

维基百科: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. 程序猿表白练级之Hello World

    程序猿表白练级之Hello World ... 推荐一个优秀的编程网站:Hello World http://www.he11oworld.com/ The Hello World Collectio ...

  2. C# 隐藏文件

    void SerializeXmlNodes(XmlSerializer serialize, string filePath, List<XmlNode> nodes) { using ...

  3. web前端笔记整理---CSS

    一   Css  文件 Css: 美化HTML的 4种选择器: 元素选择 类选择 ID选择 伪类选择 常用的布局方案 1 写在什么位置能好用. 1.1 元素里面 优先级是最高的 1.2 元素外,文件内 ...

  4. Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式

    1.概念:Aspect Oriented Programming 面向切面编程 在方法的前后添加方法   2.作用:本质上来说是一种简化代码的方式      继承机制      封装方法      动 ...

  5. 谈一谈applet踩过的坑

    看完我这篇文章,你会简单使用applet,你可以使用web项目读取运行用户电脑上的dll或者其他任何你想干的事.js与直接调用applet类里面的方法,并获取返回值. 不谈项目背景了.直接干货干起来. ...

  6. python条件判断与循环

    条件判断 1.python缩进规则: 如果if语句判断是True,就把缩进的语句执行了,否则,什么也不做,比如: age=20 if age >= 18: print('your age is' ...

  7. 关于wamp服务器文件的配置

    有的前端朋友想在手机端看PC端开发的html5页面,这时候会在本地PC下载一个wamp,这时候在PC端输入电脑的IP地址或者是直接输入localhost,可以访问www目录下的文件(开发项目必须放置在 ...

  8. 基于SSM实现的简易员工管理系统(网站上线篇)

    经历无数苦难,好不容易,网站终于上线了.=.=内牛满面ing.chengmingwei.top就是本员工管理系统的主页啦.是的,很简陋,但是毕竟是第一次嘛,所以慢慢来嘛. 如上次所说的(网站简介,见: ...

  9. Java 定时器 Timer 的使用.

    一.概念       定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的.在JDK中Timer类主要负责计划任务的功能, ...

  10. JavaScript 的使用基础总结②DOM

    HTML DOM 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素. 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HT ...