expect简易教程

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.....)。

相关文章
相关标签/搜索