expect命令是用于处理交互的。在实际应用中,咱们能够将一些交互场景写在脚本上,达到自动化的目的。mysql
下面先从一个例子入门。下面脚本主要功能是:远程登录192.168.1.1->链接mysql->切换数据库->设置不自动提交。sql
#!/usr/bin/expect spawn ssh -p 32200 192.168.1.1 send "mysql -uroot -p123456\r" expect "mysql> " send "use test\r" send "set session autocommit=0;\r" expect "mysql> " interact
有兴趣的话,能够将上述代码保存到一个可执行文件中,并使用expect file.exp的方式运行。数据库
指令介绍:expect经常使用的指令分别有:spawn、send、expect、interact、set。bash
spawn: 用于启动一个新的进程。session
命令格式:spawn [spawn-args] program [program-args]
一般咱们要经过spawn打开一个交互进程,如:ssh、ftp、scp之类,后面再经过send、expect命令与之交互。ssh
send:spa
命令格式:send [-flags] string
经过send指令向进程发送一个字符串。如:send "uname\r",向进程发送uname命令,要注意后面的"\r"表示回车的意思。命令行
expect:code
命令格式:expect [[-opts] pat1 body1] ... [-opts] patn [bodyn] 举例: expect { "a" {send "hello a\r"} "b" {send "exit\r"} -re "c|d" {send "use regex\r"} }
expect一般用于等待进程返回字符串。 如:expect "hi\r"表示进程返回了hi的字符串,加上-re表示正则匹配。此外expect支持多分支模式,相似switch-case的方式。进程
interact:
表示容许用户交互,进程停留在命令行状态下,等待用户进行操做。
注意:一般expect脚本是以expect eof或interact结束。前者表示自动化任务结束。
set:
主要用来设置环境变量。如set timeout 30表示等待30秒结束。
命令参数:$argv
expect脚本能够接受命令行传过来的参数 。如:expect my.exp 1 2 3,能够经过[lindex $argv n],得到相应的参数(n=0,1,2.....)。