文章目录
- 前言
- 一、Here Document
- 二、Expect
- 总结
前言
免交互分为两种Here document 和expect。首先HereDocument是帮助shell脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。节省大量的时间且提高效率,expect是建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题。
一、Here Document
- 使用O/I重定向的方式将命令列表提供给交互式程序
- 标准输入的一种替代品
- 语法格式
- 案例
4.1、案例1
4.2、案例2 将内容输入到指定文件
4.3、案例3给a赋值
4.4、在EOF中引用变量变成普通字符
4.5、给用户添加密码
4.6、顺序颠倒案例
4.7、故障案例
4.8、tee案例
4.9、使用脚本输出内容
4.10、脚本输出括号故障案例
4.11、本地源案例
4.12、去掉每行之前的TAB字符案例
4.13、多行注释
二、Expect
- 建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题
- xpect的安装:它是一个程序,所以需要安装
Rpm -q expect
Rpm -q tcl
Yum install -y expect tcl - 基本命令
3.1、脚本编辑器:#!/usr/bin/expect
3.2、spawn
spawn后面通常跟一个Linux执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息。
3.3、expect
判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;只能捕捉由spawn启动的进程的输出;用于接收命令执行后的输出,然后和期望的字符串匹配
3.4、send
向进程发送字符串,用于模拟用户的输入;该命令不能自动回车换行,一般要加\r(回车)或者\n
3.5、结束符expect eof
表示交互结束,等待执行结束,退回到原用户,与spawn对应。(与interact二选一)
3.6、interact
执行完成后保持交互状态,把控制权交给控制台,会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact后的命令不起作用,比如interact后添加exit,并不会退出root用户。而如果没有interact则登录完成后会退出,而不是留在远程终端上。
3.7、set
expect 默认的超时时间是10秒,通过 set 命令可以设置会话超时时间,若不限制超时时间则应设置为-1。
3.8、exp_continue
exp_continue 附加于某个expect判断项之后,可以使该项被匹配后,还能继续匹配该expect-判断语句内的其他项。exp_continue类似于控制语句中的 continue 语句。表示允许expect继续向下执行指令。
- 案例
4.1、ssh远程登陆案例
4.2、位置变量
4.3、控制台输入用户名自动填充密码
总结
在使用免交互的过程中,我们学到如果使用Here document,则可以帮助运维工程师减少使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入,当然,在使用EOF过程中,可以指定文件将内容输入,或者使用脚本的形式自动化的调用。在使用expect过程中,我们一般使用的解释器是/usr/bin/expect,spawn是跟踪后续交互信息,开启会话,expect含有多重判断的含义,send向进程发送字符串,用于模拟用户的输入,该命令不能回车换行,一般采取行后加\r或者\n。结束符号expect eof或者interact二选一即可。