expect java,Expect 使用详解
第1章 expect 概括
expect 期待
expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。
我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,比如普通用户使用sudo命令时就需要我们手动输入密码;expect就是能够完成这种自动交互任务,而无需人的干预。
第2章 使用总结:
为什么先写总结,刚才是自己使用expect也纠结了一会,总结下,在结合下面的两个案例
1、需要注意先规划好expect 大概结构,实现效果,需要参数,路径、命令
2、写shell脚本注意shell脚本中的变量需要对于expect中的变量.
2.1 使用例子
2.2 首先安装expect
[shell]
Centos OS yum 安装
yum install -y expect
Ubuntu 系统安装
apt-get install expect
[/shell]
2.3 例子一:SSH 自动远程支持mkdir
#提示写expect 需要两个脚本一个 .exp 和 .sh 如下:
#创建一个expect自动执行脚本
[shell]
root@xuebao shell]# cat expect_mkdir.exp
#!/usr/bin/expect
set date [lindex $argv 0]
set password [lindex $argv 1]
#spawn scp $src_file $username@$host:$dest_file
spawn ssh 192.20.3.99 mkdir /home/tbt/webappdata/backup/$date
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
[/shell]
#脚本解释
[shell]
[root@xuebao shell]# cat expect_mkdir.exp
#!/usr/bin/expect #解释器,告诉操作系统,使用expect必须加。
set date [lindex $argv 0] # expect脚本可以接受从shell 脚本中传递过来的参数.可以使用n从0开始,分别表示第一个,第二个,第三个….参数
set password [lindex $argv 1] #从shellz中传递密码
spawn ssh 192.20.3.99 mkdir /home/tbt/webappdata/backup/$date # spawn后面加上需要执行的shell命令、其中$date 是加的shell脚本中的时间变量
expect {
"yes/no" {send "yes\r";exp_continue} #行交互动作,与手工输入密码的动作等效。
"*password" {send "$password\r"} #行交互动作,与手工输入密码的动作等效。
}
expect eof
[/shell]
注意:expect脚本必须以expect eof结束。
2.4 相对于的shell脚本
[shell]
[root@xuebao shell]# cat expect_mkdir.sh
#!/bin/sh
#####################
#by xuebao
#2017.05.27
#####################
date=`date +%Y%m%d` #定义了一个时间变量
password=123456 #传递密码
cd /home/shell #进入存放expect_mkdir.exp 的目录
./expect_mkdir.exp $date $password #执行并传参
[/shell]
2.5 例子2 自动SCP 命令
[shell]
[root@xuebao shell]# cat expect_app.exp
#!/usr/bin/expect
set host [lindex $argv 0]
set port [lindex $argv 1]
set username [lindex $argv 2]
set password [lindex $argv 3]
set src_file [lindex $argv 4]
set dest_file [lindex $argv 5]
#spawn scp $src_file $username@$host:$dest_file
spawn scp -P $port -r $src_file $username@$host:$dest_file
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
[/shell]
2.6 相对于的shell脚本
[shell]
[root@xuebao shell]# cat expect_app.sh
#!/bin/sh
#####################
#by xuebao
#2017.05.27
#####################
DATE=`date +%Y%m%d`
src_file="/home/tbt/webappdata/$DATE/test* "
dest_file="/home/tbt/webappdata/backup/$DATE/"
host=109.202.3.100
port=22
username=root
password=12345678
#scp back host
cd /home/shell
./expect_app.exp $host $port $username $password $src_file $dest_file
echo "end"
[/shell]
最后提示:
如果文件scp 文件过大、传送中断开,因为expect默认timeout为30S
手动添加set timeout -1设置超时时间为无穷大,问题解决
在expect 脚本中添加
expect java,Expect 使用详解相关推荐
- linux expect 输入密码,shell脚本无密码登录 expect的使用方法详解
shell脚本无密码登录 expect的使用方法详解 今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了. 从 ...
- Java内存溢出详解之Tomcat配置
Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...
- Java类加载机制详解【java面试题】
Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...
- Java线程池详解学习:ThreadPoolExecutor
Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...
- Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...
Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...
- 关于Java的Classpath详解
关于Java的Classpath详解 Java 的新入门者对classpath往往比较困惑,为何在开发环境中能运行的东东出去就不好,或在外面运行的东东挺溜的进了开发环境就死菜. java的优点就是他是 ...
- java异常体系结构详解
java异常体系结构详解 参考文章: (1)java异常体系结构详解 (2)https://www.cnblogs.com/hainange/p/6334042.html 备忘一下.
- java异常处理机制详解
java异常处理机制详解 参考文章: (1)java异常处理机制详解 (2)https://www.cnblogs.com/vaejava/articles/6668809.html 备忘一下.
- Java内存溢出详解
Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在 ...
最新文章
- 下载vs2008 beta2的新方法
- 51单片机之串口通讯应用实例(逻辑分析仪调试)
- 用nodejs xml2js读取xml文件
- videocapture.read()解决内存泄露_只需4个步骤,分析解决在生产环境下JVM内存泄露问题...
- 动画学信奥 漫画学算法 CSP-J入门级 (三)、算法(依据「NOI大纲」)
- 直播丨 SQL大赛冠军怀晓明:深入解析Oracle存储过程中的性能瓶颈
- JavaScript 语言精粹 高清PDF中文版
- 202007219 Oracle建表语句
- jsoup 网页抓取简介详解
- xcode打包IPA(完整详细图文)
- SQLSERVER、ORACLE中根据汉字获取拼音函数
- 福州大学计算机学院奖学金,福州大学奖学金管理规定
- 王之泰 201771010131《面向对象程序设计(java)》第十六周学习总结
- win10便签常驻桌面_Win10下环境有哪些好用的便签记事本?想和iPhone一块儿用 - 学显...
- DOSBOX——DEBUG的简单使用
- 如何实现VMware下Ubuntu和Windows之间的复制粘贴?
- Marvolo Gaunt's Ring ---CodeForces - 855B(思维题)
- 广东省选题:单词缩写(动态规划,字符串处理)
- 零代码可视化编程语言iVX是什么?
- RPC原理(1)之深入RPC原理简介