Shell Expect自动化交互(示例)

Shell Expect自动化交互

日常linux运维时,经常需要远程登录到服务器,登录过程中需要交互的过程,可能需要输入yes/no等信息,所以就用到expect来实现交互。

关键语法

❶[#!/usr/bin/expect]

这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。 注意:这一行需要在脚本的第一行。

❷set

expect 默认的超时时间是10秒,通过 set 命令可以设置会话超时时间,若不限制超时时间则应设置为-1。

例如:set timeout 300 // 表示会话超时时间为300s

例如:set timeout -1 /设置/永不超时,常用设置

备注:为什么要设置超时时间,因为默认时间是10s,则在交互执行的过程中,很可能会断开,导致任务执行没完成就终止。我司的一个从远程ftp上同步文件的计划任务总是执行终止,后来设置了超时时间为-1就可以了。

❸spawn

spawn后面通常跟一个Linux执行命令,表示开启一个会话、启动进程,并追踪后续交互信息。

❹expect

只有spawn执行的命令的执行结果才被expect捕捉到,主要包括标准输入的提示信息、eof和timeout。等待命令提示信息的出现,也就是捕捉用户输入的提示:

➎send

发送需要交互的值,替代了用户手动输入内容;该命令不能自动回车换行,一般要加\r(回车)或者\n

expect "密码"{ send "abc123\r"} //同一行send部分要有{}

❻结束符expect eof/interact

expect eof

这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

interact

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

PS:expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

示例

在shell脚本中插入expect命令,格式为如下

示例1:22.sh创建文件夹脚本

|--------------------------------------------------------------------------------------------------------------------------------------------------------|
| #!/bin/sh expect spawn ssh 10.1.1.196 expect password {send xxx\n} send cd /home/cg/hmf_app/test\r send mkdir newwork\r send exit\r expect eof EOF |

示例2:创建文件夹shell脚本

|----------------------------------------------------------------------------------------------------------------------------------------------|
| expect spawn ssh 10.1.1.196 expect password {send xxx\n} send cd /home/cg/hmf_app/test\r send mkdir newwork\r send exit\r expect eof EOF |

示例3:拷贝文件

|----------------------------------------------------------------------------------------------------------------------------|
| expect set timeout -1 spawn scp root@10.1.1.10:/data/package/casb/$casbzip ./ expect password {send xxx\n} expect eof EOF |

备注:

EOF

...

EOF

代表一段shell脚本

参考:Shell Expect自动化交互_shell脚本交互自动输入内容-CSDN博客

相关推荐
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
AI职业加油站5 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏5 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
-梅5 天前
linux(8) 软硬链接
linux·运维·服务器
张洛闻Eren5 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
其实防守也摸鱼5 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
布裘5 天前
【银河麒麟】V4桌面图标消失,右击鼠标没反应排查
运维·银河麒麟·桌面环境
懂软件的胡子个哥5 天前
微信机器人为什么需要“回复候选”而不是所有 AI 内容直接发送
运维·微信·自动化·wechatapi·个人微信号二次开发
云贝贝贝5 天前
腾讯云 TDSQL(MySQL 版)性能优化与慢查询排障实战 6 招
运维·腾讯云
Lsetea5 天前
证书没到期却报certificate has expired:OpenSSL定位中间证书与系统时间
运维·https·ssl证书·openssl·证书链