shell脚本之expect免交互

一、expect概述
expect是建立在tcl基础上的一个工具,expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题,对于大规模的linux运维很有帮助 在Linux运维和开发中,我们经常需要远程登录服务器进行操作,在登录的过程是一个交互的过程,可能会需要输入yes/no password等信息。
为了模拟这种输入,可以使用expect脚本
二、expect基本命令
2.1、expect安装
系统一般不自带,需要自己安装 安装命令

在这里插入图片描述
2.2、expect流程命令
spawn:启动进程,并跟踪后续交互信息 send:向进程发送字符串,用于模拟用户的输入 该命令不能自动回车换行,一般要加、r(回车) expect expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回 只能捕捉有spawn启动的进程的输出 interact:执行完成后保持交互状态,把控制权交给控制台
2.3、expect内容命令
Timeout:指定超时时间,过期则继续执行后续指令
单位是:秒
timeout -1为永不超时
默认情况下,timeout是10秒exp_continue
允许expect继续向下执行指令send_user
回显命令,相当于echo
2.4、expect其他命令
$argv参数数组 Expect脚本可以接受从bash传递的参数,可以使用[lindex $argc n]获得,n从0开始,分别表示第一个,第二个,第三个…参数
arg:参数
v:value Expect脚本的结尾 expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了 expect eof是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof就是在等待这 个标记

三、expect执行方式
expect语法
在这里插入图片描述
四、Expect实操
4.1、创建用户qwer,密码qwer123
正常情况下的交互过程
在这里插入图片描述
使用嵌入式脚本创建
在这里插入图片描述
在这里插入图片描述