Here Document

Here Document概述

使用I/O重定向的方式将命令列表提供给交互程序
标准输入的一种代替品
语法格式:
命令 <<标记


标记

Here Document使用注意事项

标记可以使用任意合法字符
结尾的标记一定要定格写,前面不能有任何字符
结尾的标记后面也不能有任何字符(包括空格)
开头标记前后的空格会被省略掉

Here Document免交互

(先发起,交代动作命令;后免交互输入的值)

read免交互

免交互应用中场景和配置
免交互应用中场景和配置

给用户设置密码

免交互应用中场景和配置
免交互应用中场景和配置

Here Document变量设定

变量替换

免交互应用中场景和配置
免交互应用中场景和配置

变量设定

免交互应用中场景和配置
免交互应用中场景和配置

Here Document格式控制

关闭变量替换功能

免交互应用中场景和配置
免交互应用中场景和配置

去除每行之前的TAB字符 (注意是Tab不是空格,空格报错)

免交互应用中场景和配置
免交互应用中场景和配置

Here Document多行注释

通过Here Document方式使Bash支持多行注释

语法格式:

:<<DO-NOTHING
第一行注释
第二行注释

DO-NOTHING

示例

免交互应用中场景和配置
免交互应用中场景和配置

expect概述

expect

建立在tcl(基本语言工具)之上的一个工具
用于进行自动化控制和测试(屏幕捕捉)
解决shell脚本中交互相关的问题

expect安装

yum安装
yum -y install expect
检查
rpm -qa | grep expect
rpm -qa | grep tcl

基础命令

spawn

启动进程,并跟踪后续交互信息

expect

判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
只能捕捉由spawn启动的进程的输出
用于接收命令执行后的输出,然后和期望的字符串匹配

send

向进程发送字符串,用于模拟用户的输入
该命令不能自动回车换行,一般要加\r(回车)或\n

结束符

expect eof (执行自动化任务通常使用expect eof)
等待执行结束
expect <<eof

eof

interact
执行完成后保持交互状态,把控制权交给控制台

set

设置超时时间,过期则继续执行后续指令
单位是秒
timeout -l表示永不超时
默认情况下,timeout是10秒

exp_continue

允许expect继续向下执行指令
解析:如果有一条语句错误,不加exp_continue,就会到此为止,退出
加上exp_continue会继续执行后续语句,不退出。

send_user

回显命令,相当于echo

接收参数

Expect脚本可以接受从bash传递的参数
可以使用[lindex $argv n]获得
n从0开始,分别表示第一个,第二个,第三个…参数
/bin/bash的位置变量是从$1开始到$9结束
Expect[lindex $argv 0]相当于/bin/bash的$1

expect 语法

单一分支语法(输入一次)

expect “password:” {send “passsword\r”}

多分支模式语法(连续输入多次情况)

第一种

expect “aaa” {send “AAA\r”}
expect “bbb” {send “BBB\r”}
expect “ccc” {send “CCC\r”}
send命令不具备回车换行功能,一般要加\r或\n

第二种

expect{
“aaa” {send “AAA\r”}
“bbb” {send “BBB\r”}
“ccc” {send “CCC\r”}
}
只要匹配了aaa或者bbb或者ccc中的任何一个,执行相应的send语句后退出该expect语句(只会匹配执行一条语句)

第三种

expect{
“aaa” {send “AAA”;exp_continue}
“bbb” {send “BBB”;exp_continue}
“ccc” {send “CCC”}
}
exp_continue表示继续后面的匹配,如果匹配了aaa,执行完send语句后还要继续向下匹配bbb(继续执行向下的语句,直到结束)

expect执行方式

直接执行
嵌入执行

项目配置

创建用户并设置密码

免交互应用中场景和配置
免交互应用中场景和配置

ssh免密登录

免交互应用中场景和配置
免交互应用中场景和配置

ftp登录

免交互应用中场景和配置
免交互应用中场景和配置
ftp登录
免交互应用中场景和配置
免交互应用中场景和配置

相关文章: