Linux expect
来源:互联网 发布:visio软件官方下载 编辑:程序博客网 时间:2024/06/10 21:05
1 Linux expect
expect据说是交互性很强的脚本语言
我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器,SSH、SCP需要输入密码等进行交互的功能(比如实现SCP自动化运行,而不需要人工输入密码)而Expect就使用来实现这种功能的工具。
2. 安装
查看是否安装 rpm -ql expect
安装:yum install expect*
3. 举例
在之前的文章了说过,我是测试开发,所有很多例子都和测试开发相关,我们有一个场景,需要从 别的服务器上download 我们所需要的文件,只有 ftp 和scp的方法, 由于没有舍子 ftp服务,所以需要 scp 拿数据,但是 scp大家都知道,需要交互,输入scp命令以后需要输入密码,但是我们需要自动化执行,那怎么办呢? 一种方式是连个机器建立信任,由于另外一个机器我们不能随便动,而且这个方法也比较麻烦,所以就采用expect 的方法。举例代码如下
1)书写expect脚本(看不懂暂时不要紧,下面将有详细的解释)
#!/usr/bin/expectset timeout 3600set 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_filespawn scp -P $port -r $username@$host:$dest_file $src_fileexpect { "(yes/no)?" { send "yes\n" expect "*assword:" { send "$password\n"} } "*assword:" { send "$password\n" }}expect "100%"expect eof
2) 将上面的expect脚本保存,但是并不是保存为.sh等shell脚本,而是保存一个名称就好 如:scp_expect
3)执行expect脚本
./scp_expect 参数
下面将详细解释一下expect脚本
第一行: #!/usr/bin/expect
解释: 告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。和shell 的 #!/bin/sh是一样的
其实就是expect注意安装的路径,不确定 whereis expect 一下
第二行:set timeout 3600
解释: 3600 代码刚开始还设定了timeout的时间为3600秒,如果在执行scp任务时遇到了代码中没有指定的异常,则在等待3600秒后该脚本的执行会自动终止。
第三行-第八行 : set host [lindex $argv 0]
解释: 获取参数,和其他shell的 $1 $2不同。这个是从下标 1开始的。而且用法是 固定的:[lindex $argv 0
第10行:spawn scp -P $port -r $username@$host:$dest_file $src_file
scp 命令:spawn是进入expect环境后才可以执行的expect内部命令
第11行---
expect {
"(yes/no)?" { // 交互信息是否包含字符串 yes/no)?
send "yes\n" // 交互信息是否包含字符串 yes/no)? 如果包含,输入yes\n
expect "*assword:" { send "$password\n"} // 交互信息是否包含字符串 "*assword" 如果包含,输入$password\n
}
"*assword:" { //scp 的时候有可能需要输入yes/no 下面这个是没有(yes/no)?交互情况下的处理方式
send "$password\n"
}
}
最后一行:
解释: 如果不需要保持交互方式,使用 expect eof 如果想保持交互方式,使用 interact
4.
expect几乎都是用户想把交互方式自动化 SSH也可以使用这种方式
- expect linux
- linux expect
- Linux expect
- Linux expect
- linux expect
- linux expect
- linux expect
- Linux expect
- expect spawn、linux expect 用法
- expect spawn、linux expect 用法
- expect spawn、linux expect 应用
- expect spawn、linux expect 用法
- expect spawn、linux expect 用法
- expect spawn、linux expect 用法
- linux expect spawn、linux expect 用法
- expect spawn、linux expect 用法小记
- expect spawn、linux expect 用法小记
- expect spawn、linux expect 用法小记
- 深度学习的应用——检测糖尿病型视网膜症
- VS2013/MFC编程入门之二十三(常用控件:列表框控件ListBox)
- 文章标题
- Android Studio检测没有用到的资源
- C++ Exe与Dll之间传递标准库容器条件
- Linux expect
- Java三大主流框架概述
- shutdownHook
- OpenStack修改IP/MAC对VM通信影响
- 谜一样的Java编码和Windows编码
- 直播风口下的CDN行业,原快播技术团队能否再造一个Uber?
- CloudInit & User-Data
- 【miscellaneous】gstreamer构建的简单方法
- 如何配置Nginx作为WebSocket的反向代理