Linux Shell 脚本自动应答交互expect

查看系统是否安装了expect,执行命令如下:

whereis expect

只输出expect:,表示没有找到安装位置,即没有安装。

安装expect

yum install -y expect

expect命令

命令作用
spawn启动一个新的进程,用来执行后面所接的COMMAND
expect期待从进程中获取的内容
send向进程发送内容
set timeout n设置超时时间,单位:,超过n秒则不再继续等待进程的内容返回
interact是否保留交互状态

expect的逻辑就是:

send一个命令,expect等这个命令的输出,只有expect匹配上了上一个命令的响应字符串,才会执行下一个send命令。

示例sftp登陆下载文件

首先,先手动交互下载一次,记录交互响应的字符串会用到

用户名myftp,密码123456,主机地址192.168.1.2

#!/usr/bin/expect
#这里指监控30秒内依然会自动输入密码
set timeout 30
#执行sftp登陆命令sftp myftp@192.168.1.2
spawn sftp myftp@192.168.1.2
#执行sftp登陆命令sftp myftp@192.168.1.2响应回来就是"myftp@192.168.1.2's password: "
expect "myftp@192.168.1.2's password: "
#输入密码123456后面\n表示回车
send "123456\n"
#输入密码正确后,响应回来"sftp> "
expect "sftp> "
#进入data目录
send "cd data\n"
expect "sftp> "
#下载test.txt
send "get test.txt\n"
expect "sftp> "
#退出
send "quit\n"
#将控制权交还给用户
interact

 示例scp复制远程文件到本地

首先,先手动交互下载一次,记录交互响应的字符串会用到

用户名oracle,密码123456,主机地址192.168.1.2,远程路径:/home/oracle/db/diag/rdbms/orcl/orcl/trace/alert_orcl.log

本地路径:/home/test/log_backups

#!/usr/bin/expect
set timeout 30
spawn scp oracle@192.168.1.2:/home/oracle/db/diag/rdbms/orcl/orcl/trace/alert_orcl.log /home/test/log_backups
#这一步就是执行上面scp命令后响应的字符串,只有expect匹配上了这个字符串才会执行后面的send命令
expect "oracle@192.168.1.2's password: "
send "123456\n"
#控制权交还给前台
interact

定义变量

#定义password变量值为123456
set password 123456
#定义d变量,值为当前格式化的时间
set d [exec date "+%Y-%m-%d"]
spawn scp test@192.168.1.2:/home/test/tomcat/logs/localhost_access_log.$d.txt /home/test/log_backups 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值