expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh登录,ftp登录等都符合交互的定义。
expect有四个关键命令,作用如下:
- send:用于向进程发送字符串
- expect:从进程接收字符串
- spawn:启动新的进程
- interact:允许用户交互
关于四个命令的详细用法,这里不做过多介绍,网上资料很多,大家可以自行搜索,下面只列举一个最基本的用法,使用shell脚本登录远程服务器:
#!/usr/bin/expect spawn ssh [email protected] expect "*password:" send "123456\r" expect eof
我们来看此段代码的第一行,熟悉shell的朋友一定知道,这里是声明下面的代码使用的是expect来解析,但是expect的语法又和平时所用的bash语法不一样,那如果我们希望用熟悉的bash语法该怎么办 呢?看下面的代码:
#!/bin/bash /usr/bin/expect <<-EOF # 设置超时时间 set time 30 spawn ssh [email protected] #这样写比较繁琐,这个示例用下面的写法,可以一次匹配好多参数 #expect "*password:" #send "13456\r" expect { "*yes/no" {send "yes\r"} "*password" {send "123456\r"} } expect eof EOF echo OK
第一行声明用了我们最熟悉的bash,那么说明里面的内容就可以用bash语法了,在EOF之外,尽情的挥洒bash代码吧!