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)


相关推荐

  • 感觉自己不会的东西太多了,不知道如何下手?

    感觉自己不会的东西太多了,不知道如何下手?GitHub8.8kStar的Java工程师成神之路,不来了解一下吗?GitHub8.8kStar的Java工程师成神之路,真的不来了解一下吗?GitHub8.8kStar的Java工程师成神之路,真的确定不来了解一下吗?如果让我统计下,粉丝问我做多的问题是什么,这个问题肯定可以排前5,问出这个问题的朋友们遍布各个年龄段。实话说,这个问题同样也困扰过我,大概就是我刚…

  • Git 忽略一些文件不加入版本控制

    Git 忽略一些文件不加入版本控制

    2021年10月20日
  • memcached出现:Fatal error: Call to undefined method Memcached::connect()

    memcached出现:Fatal error: Call to undefined method Memcached::connect()

  • live555源代码概述「建议收藏」

    live555源代码概述「建议收藏」
    live555源代码概述2010年01月29日星期五13:03liveMedia项目(http://www.live555.com/)的源代码包括四个基本的库,各种测试代码以及MediaServer。四个基本的库分别是:UsageEnvironment&TaskScheduler,groupsock,liveMedia和BasicUsageEnvironment。 

    UsageEnvironment和TaskScheduler类用于事件的调度,实现异步读取事件的

  • 郑州java面试难吗_java开发人员培训机构

    郑州java面试难吗_java开发人员培训机构前言周末花了2天时间学习了额RabbitMQ,总结了最核心的知识点,带大家快速掌握RabbitMQ,整理不易希望帮忙点赞,转发,分享下,谢谢目录进入SpringBoot世界讲述Sping、SpringBoot和SpringCloud之间的关系,还重点讲述了如何利用开发工具(如IDEA)来实现开发,如何通过API文档来寻找类对象方法,告诉我们在开发过程中如何学习、发现和解决问题需要免费领取这份Alibaba架构师耗时一年整理的《SpringBoot实战,让你的开发像搭积木一样简单

  • ASP脚本_笛子入门基础教程手指训练

    ASP脚本_笛子入门基础教程手指训练通过前两篇的学习,相信各位已经对ASP的动态网站设计有了一个基本的概念和整体的印象。从本篇开始作者将从脚本语言的使用着手,由浅入深地带领大家探索ASP动态网站设计的真正奥秘。本文第二篇刊登后

发表回复

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

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