expect自动化交互脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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        ##结束脚本


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

本文出自 “小小小平凡” 博客,谢绝转载!

以上是关于expect自动化交互脚本的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本引用expect

Shell脚本------免交互(Here Document免交互,Expect自动化交互)

expect工具实现脚本的自动交互

expect自动化交互脚本

expect实现脚本的 自动交互

expect免交互脚本编程