expect java,Expect 使用详解「建议收藏」

expect java,Expect 使用详解「建议收藏」第1章expect概括expect期待expect是Unix系统中用来进行自动化控制和测试的软件工具,由DonLibes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

第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 大概结构,实现效果,需要参数,路径、命令

2d7ea6fa940758be3165e78e5c819dfa.png

2、写shell脚本注意shell脚本中的变量需要对于expect中的变量.

8aa93ac8f5a2218b8477c69258d30ce8.png

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 脚本中添加

d7a99bdcfdd459191b2f726420f54e86.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234612.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux快捷键停止抓包命令,【linux命令】Linux抓包命令tcpdump以及常见抓包使用方法…[通俗易懂]

    linux快捷键停止抓包命令,【linux命令】Linux抓包命令tcpdump以及常见抓包使用方法…[通俗易懂]一个学友问下怎么没有抓包命令的教程,感谢热心反馈,特地这里简单补充下内容以便学友了解。系统运行过程中,难免发现服务器一些流量异常或访问异常,我们可以采用tcpdump命令进行抓包。下边简单介绍下该命令使用办法。1,安装tcpdump一些系统默认没有安装,我们需要yum安装下这个命令:yuminstalltcpdump-y2,tcpdump使用。一些使用我们可以tcpdump–help看下…

  • 微型计算机硬件性能主要取决于什么,微型计算机硬件系统的性能主要取决于

    微型计算机硬件性能主要取决于什么,微型计算机硬件系统的性能主要取决于大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。微型计算机硬件系统的性能主要取决于微处理器。微处理器能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作,是微型计算机的运算控制部分。它可与存储器和外围电路芯片组成微型计算机。微处理器,是指用一片或少数几片大规模集成电路组成的中央处理器。与传统的中央处理器相比,微处理器具有体积小、重量轻和容易模块化等优点。能完成取指令…

  • 一般人到底要不要学Python_Python值得学吗

    一般人到底要不要学Python_Python值得学吗前言本人纯屌丝一枚,在学python之前对电脑的认知也就只限于上个网,玩个办公软件。这里不能跑题,我为啥说自学python,一般人我还是劝你算了吧。因为我就是那个一般人。基础真的很简单,是个人稍微认点真都能懂,这就是好多人说的python简单、易懂、好学,然后就是一顿浮夸的言论,误导那些小白,再然后那些小白也就跟着浮夸。这里我就给那些轻浮的人泼一桶冷水,懂跟学会是一码事吗?先来说哈python这个就业哈,我现在生活在祖国的肚皮上–成都,(嗯,有想了解川西迷你小环线的在下面留言哦),下面亲身经历,我喃,

  • 虚拟机与服务器桥接不能上网,vmware虚拟机桥接模式不能上网

    虚拟机与服务器桥接不能上网,vmware虚拟机桥接模式不能上网IntelliJIDEA的Jetty部署插件jetty相对于tomcat来说,启动速度非常快,方便调试.在idea的maven项目中,只需要在pom.xml配置文件中配置jetty的插件即可.全部:mvc无法找到资源昨天装了vs2015,但是第二步没有完成.今天急急忙忙的用13打开一个mvc的项目,但是添加的控制器怎么都不能访问.无法找到资源.说明:HTTP404.您正在查找的…

  • Parallel.ForEach() 并行循环[通俗易懂]

    Parallel.ForEach() 并行循环[通俗易懂]现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。微软的并行运算平台(Microsoft’sParallelComputingPlatform(PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。Parallel.ForEach()和Parallel.For()就是微软并发类的成员。今天做了一个简…

  • JAVA异或运算符_java位运算符详解

    JAVA异或运算符_java位运算符详解目录目录性质应用举例其他用途示例异或是一种基于二进制的位运算,用符号XOR或者^表示,起运算法则是对运算符两侧数的每一个二进制位同值则取0,异值则取1.简单理解就是不进位加法,如1+1=0,0+0=0,1+0=1.性质1、交换律2、结合律(即(a^b)^c==a^(b^c))3、对于任何数x,都有x^x=0,x^0=x4、自反性AXORBXORB=

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号