| 命令 | 说明 |
|---|---|
| set timeout n | 设置expect语句超时时间为n秒。-1为永不超时 |
| set name value | 设置变量名为name,其值为value |
| set name [lindex $argv 0] | 设置变量名为name,其值为 传入 expect脚本的第一个 参数 。第一个参数的索引值为0,第二个为1,依次类推 |
| spawn | 启动新的进程,执行命令或者指定程序 |
| expect | 接收进程中返回的信息, 如果匹配成功(有大小写区分), 就执行expect后的动作 |
| send | 向进程发送字符串 |
| send_user | 用来打印信息,相当于shell中的echo |
| exp_continue | 执行完expect后的动作后,使expect不退出,继续往下匹配 |
| expect eof | 不允许用户交互,直接退出(这个用的会比interact多) |
| interact | 允许用户交互 |
(1)创建一个shell脚本,1.sh
#!/bin/bash
echo "read print"
read -p "please input name in there " NAME
echo ${NAME}
read -p "input password in there " PASSWORD
echo ${PASSWORD}
该脚本的意思就是输入你的账号,密码,并打印出来
(2)创建一个expect脚本,1.exp。让1.exp帮我们输入信息
#!/usr/bin/expect
#若要运行shell脚本,写shell脚本的绝对路径
spawn bash /home/hadoop/test/1.sh
#设置expect语句的超时时间。默认10s
set timeout 3
expect {
#expect类似于swtich语句,在括号{}内匹配语句,只要一找到匹配的语句,就会执行,
#执行完之后就会退出,而加上exp_continue之后不会退出,会继续往下执行。
#这里是匹配字符串,不需要双引号,有大小写区分
name {
send "meizhaowei\r"
send_user "success\n"
#回显示给用户的信息,类似与echo,打印信息到控制台上
exp_continue
}
assword {send "123456\r"}
}
expect eof #与interact相反,执行完程序不进入人工交互
(3)运行

正常来说,运行1.sh会让你手动输入name与password,但是这里运行了1.exp后,就能让1.exp来帮你输入1.sh的信息
若你想更深入的研究expect语法,这里有使用手册
英语原版:http://www.tcl.tk/man/expect5.31/expect.1.html
中文翻译:https://blog.csdn.net/cbuy888/article/details/80561461
到此这篇关于linux自动化交互脚本expect的文章就介绍到这了,更多相关linux expect自动化交互脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!