expect基础
在使用expect时,基本上都是和以下四个命令打交道:
命令 | 作用 | 说明 |
---|---|---|
send | 用于向进程发送字符串 | 命令接收一个字符串参数,并将该参数发送到进程 |
expect | 从进程接收字符串 | 命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令 |
spawn | 启动新的进程 | spawn后的send和expect命令都是和使用spawn打开的进程进行交互 |
interact | 允许用户交互 | 主要用于退出自动化,进入人工交互 |
expect脚本我们这里只使用了expect 和 send,expect意味着出现的提示信息,send就可以书写正常的linux命令,具体看例子。具体书写还是要靠大家自己调试,基本框架都是我这个例子里面。
这个例子是bash脚本和expect脚本相结合
#! /bin/bash
# bash脚本的标志
/usr/bin/expect <<EOF
# 这里意味着bash脚本中嵌套着expect脚本
set timeout -1
# 设置超时时间,-1意思是永远也不超时
spawn ssh root@192.168.1.15
# 意味着远程登录到我这个应用的数据库服务器
expect {
"*(yes/no)*" {
send "yes\n"
expect "passwd:"
send "Pandora!74\n"
}
"*password:" {
send "Pandora!74\n"
}
}
# 第一次远程登录别的服务器的时候会出现一些
# 提示,你可以在你自己的应用上ssh +IP尝试一下,我这里
# 会出现(yes/no),接着会让我输入密码。第二次登录就是
# 直接提示输入密码。所以这里是‘或’关系中嵌套