欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux Shell 脚本自动应答交互expect

程序员文章站 2022-07-14 18:16:10
...

查看系统是否安装了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 [email protected]
spawn sftp [email protected]
#执行sftp登陆命令sftp [email protected]响应回来就是"[email protected]'s password: "
expect "[email protected]'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 [email protected]:/home/oracle/db/diag/rdbms/orcl/orcl/trace/alert_orcl.log /home/test/log_backups
#这一步就是执行上面scp命令后响应的字符串,只有expect匹配上了这个字符串才会执行后面的send命令
expect "[email protected]'s password: "
send "123456\n"
#控制权交还给前台
interact

定义遍历

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