目录
一、Here Document
概述
1、使用I/O重定向的方式将命令列表提供给交互式程序
2、标准输入的一种替代品
3、语法格式
命令 <<标记符
……
……
标记符
注意事项:
1、标记可以使用任意合法字符
2、结尾的标语一定要顶格写,前面不能有任何字符
3、结尾的标记后面也不能有任何字符(包括空格)
4、开头标记前后的空格会被省略
实例
修改变量
[root@localhost ~]# read a
10
[root@localhost ~]# echo $a
10
[root@localhost ~]# read a <<EOF
> 220
> EOF
[root@localhost ~]# echo $a
220
变量替换
[root@localhost ~]# a=$(cat<<EOF
> 20
> $a
> EOF
> )
[root@localhost ~]# echo $a
20 220
关闭变量替换
[root@localhost ~]# a=$(cat<<'EOF'
> 30
> $a
> EOF
> )
[root@localhost ~]# echo $a
30 $a
二、expect
一、概述
1、Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中交互相关的问题。
2、expect是免交互的软件,需要安装。软件名expect。
基本命令
expect
1、判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
2、只能捕捉由spawn启动的进程的输出
3、用于接收命令执行后的输出,然后和期望的字符串匹配
send
1、向进程发送字符串,用于模拟用户的输入
2、该命令不能自动回车换行,一般要加\r (回车),\n(换行)
spawn
启动进程,并跟踪后续交互信息
结束符
1、expect eof:等待执行结束(用于执行自动化任务)
2、interact:执行完成后保持交互状态,把控制权交给控制台
set
1、设置超时时间,过期则继续执行后续指令
2、单位是秒
3、timeout -1表示永不超时
4、默认情况下,timeout是10秒
例:set timeout 20 #登录时超过到少秒退出
exp_ continue
允许expect继续向下执行指令
send_user
回显命令,相当于echo
开启日志文件
log_file test.log #日志记录操作
显示信息
log_user 1 #1为屏幕输出信息,0为不输出信息
接收参数
1、Expect脚本可以接受从bash传递的参数
2、可以使用[lindex $argv n]获得
3、n从0开始,分别表示第一个,第二个,第三个...参数
二、经典案列ssh远程登录
#!/usr/bin/expect
set timeout 10
1og_file ex.1og
1og_user 1
set user [lindex $argv 0]
set ip [lindex $argv 1]
set pass [lindex $argv 2]
spawn ssh $user@$ip
expect {
“passwd:”
{ send "$pass\r"; }
}
#interact
expect "#"
send "ls\r"
send "ifconfig ens33\r"
send "exit\r"
expect eof
#!/bin/bash
expect -C “
spawn ssh root@192. 168.238.150
expect \"password:\" { send \"123456\r\" }
expect \"]#\" { send \"1s\r\" }
expect \"]#\" { send \"ifconfig ens33\r\" }
expect \"]#\" { send \"exit\r\" }
expect eof
”