expect自动化交互脚本(三)

接着写一个稍微复杂点的脚本,分发文件到指定服务器脚本。

首先我们要知道远程分发文件的命令格式

scp 源文件 验证用户@远程主机:远程目录
[[email protected] ~]# scp auto_yes.exp [email protected]:/tmp/

需求就是通过脚本来实现发送,不需要输入密码,也就是验证用户是固定的还有密码是固定的,其他的主机IP和目的路径是不固定的,我们通过设置为位置变量来实现自定义化。最终实现的效果:

[[email protected] ~]# expect batch_file.exp 172.18.0.20 yezi.txt /tmp/
spawn scp yezi.txt [email protected]:/tmp/
yezi.txt                              100%  343     0.3KB/s   00:00

全程不需要输入密码,而只需要指定主机IP和发送的文件已经发送到目的主机的目的路径,其他的密码和验证用户都已经在脚本中设置好了

看一下脚本:

#!/usr/bin/expect
if { $argc != 3 } {
puts "Please use: ‘expect $argv0 ip source_file d_path‘"
exit
}
set ip [lindex $argv 0]
set sfile [lindex $argv 1]
set dpath [lindex $argv 2]
set password "rxadmin123"

#
spawn scp $sfile [email protected]$ip:$dpath
expect {
"*yes/no" {exp_send "yes\n";exp_continue}
"*password" {exp_send "$password\n"}
}
expect eof

标记分析一下:

#!/usr/bin/expect
if { $argc != 3 } {  
##先做一个判断,如果位置变量不是3个则提示"Please...d_path",这里的argc和Shell里的$#是一样的

puts "Please use: ‘expect $argv0 ip source_file d_path‘"
##puts后面提示内容,用""标记

exit    ##退出判断
}

set ip [lindex $argv 0]
##设置ip变量,这里的argv 0等于Shell里的$1

set sfile [lindex $argv 1]
##设置sfile变量,这里的argv 1等于Shell里的$2

set dpath [lindex $argv 2]
##设置dpath变量,这里的argv 1等于Shell里的$3

set password "123456"
##设置密码123456为$password
#

spawn scp $sfile [email protected]$ip:$dpath
expect {
"*yes/no" {exp_send "yes\n";exp_continue} ##这里的exp_send和send类似
"*password" {exp_send "$password\n"}
}
expect eof        ##结束脚本

!!! 需要注意的是里面的每个符号都为英文符号,{}和""以及;的用法都是固定格式,请牢记,建议脚本复制后故意删除符号进行测试符号的作用

时间: 2024-08-29 11:01:50

expect自动化交互脚本(三)的相关文章

expect自动化交互脚本(二)

紧接着上篇脚本进行拆分,分析里面的每个单词以及参数,解开交互的面纱,下面看脚本 #!/bin/expect spawn ssh [email protected] expect {       "yes/no"     {send "yes\r";exp_continue}  ##匹配到yes/no就自动输入yes,继续往下匹配       "*password"    {send "root\r"}        ##匹配到

expect 自动化交互软件

一.expect简介 expect是基于TCL的相对简单的一种免费的脚本编程工具语言,用来实现自动和交互式任务程序进行通信,无需人的手工干预,如:SSH.FTP等.这些程序正常情况下都需要手工进行交互,而使用expect就可以模拟人手工交互的过程,实现自动和远端程序的交互,从来达到自动化运维的目的. 官方解释:expect是一个用来实现自动交互功能的软件套件(expect is a software suite for automating interactive tools) expect支持

expect免交互脚本编程

一.大纲 1.Expect概述2.Expect安装(底层语言Tcl)3.Expect基本命令4.Expect执行方式5.Expect案例 一.Expect概述 1.Expect是建立在tcl语言基础上的一个工具,Expect是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助.2.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会余姚输入yes/no password等信息.为了模拟这种输入,可

自动化交互程序Expect应用实践

Expect自动化交互程序应用实践 1.Expect简介 1.1什么是Expect Expect第一个用来实现自动化交互功能的软件套件,是基于TCL的脚本编程工具语言,方便学习,功能强大. 1.2为什么要使用Expect 在现在的企业运维中,自动化运维已经成为运维的主流趋势,但是在很多情况下,执行系统命令或程序时,系统需要以交互式的形式要求运维人员输入指定的字符串,之后才能继续执行命令.例如,为用户设置密码时,一般情况下需要手工输入2次密码.ssh远程连接服务器时需要输入yes和密码信息,才能连

自动交互脚本之expect

一.Expect简介 在远程服务器执行某项任务,这是最正常不过了,如何有效自动的执行呢?这里介绍自动交互脚本expect的使用. Expect是一个简单的工具语言,功能就是进行自动化的人机交互.它的作者对Expect的定义:是一个实现自动交互功能的软件套件(a software suite for automating interactive tools),使用expect,它能帮助我们在合适的情景下进行合适的交互. Expect是一种能够按照脚本内容里面设定的方式与交互式程序进行"会话&quo

expect实现自动化交互(转载)

综述:expect主要包含三部分,spawn,expect和send spawn实现交互命令的劫持,是自动化交互的基础:然后可以用expect来进行结果查询: expect实现对交互命令输出的解析,得到关键字的查询,如password,user,然后停止,等待交互: send对解析字段内容尽心输入:如password,user,并用\r结束,停留在交互界面:interact. 一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时

自动化交互expect

一,介绍 每次服务器控制链接都需要输入密码,很麻烦,每次交互大大延长了时间 因此就有了免交互及自动化交互存在expect 二,安装 yum install expect -y 查看是否安装成功 rpm -qa expect 安装算是完成了 三,ssh链接交互 主机:三台 ---->一台主控制服务器 10.0.0.203        ----mysql服务器 10.0.0.204 -----web服务器 手动链接服务器的话需要实现两次交互操作 我们现在用expect交互 编写kingle.exp

与bash script脚本自动化交互

如果bash脚本中一些命令需要手工输入进行交互的时候,那么脚本的自动化就没法进行下去.比如:ssh somehost需要输入用户名和密码,脚本运行到这个命令后,便会停止,等待用户输入. 如果在简单情景下,比如只需要用户输入一次,即一次性交互时,可以直接这样: # ... some directives here # Remove the machine, confirming "y" when asked by docker-machine echo 'y' | docker-mach

Linux - 通过expect工具实现脚本的自动交互

目录 1 安装expect工具 2 expect的常用命令 3 作用原理简介 3.1 示例脚本 3.2 脚本功能解读 4 其他脚本使用示例 4.1 直接通过expect执行多条命令 4.2 通过shell调用expect执行多条命令 5 spawn not found 的解决 1 安装expect工具 expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是: spawn启动指定进程 -> expect获取指定关键字