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
推荐阅读
-
linux shell 常用脚本语句语法收集 推荐
-
详解Linux运维CentOS系统SVN双备份Shell脚本
-
Linux 在Shell脚本中使用函数实例详解
-
linux下自动备份MySQL数据并上传到FTP上的shell脚本
-
linux下实现ftp自动备份shell脚本
-
Bash 脚本实现每次登录到 Shell 时可以查看 Linux 系统信息
-
Linux下shell通用脚本启动jar(微服务)
-
Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤
-
Ubuntu、Linux Mint一键安装Chrome浏览器的Shell脚本分享
-
expect实现批量修改linux密码脚本分享