Expect 学习笔记 ————Tim 一、Expect 介绍 Expect 是一种 TCL 扩展性的语言,主要用于完成系统交互方面的功能,比如 SSH、FTP 等,这些程序都需要手工与它们进行互动,而使用 Expect 就可以模拟人手工互动的过程,使用一种自动的方式控制。 Expect 中,有三个重要的主命令,分别是 spawn、expect、exp_send,这三个命令几乎存在于所有 Expect 脚本中,除了这些之外,还有很多 Expect 所特有的参数、变量,它们也作用与 Expect 的方方面面。 二、 Expect 命令 Expect 中命令是最重要的部分,它们完成 Expect 中最关键的功能,命令使用的特点就是他们本身就可以单独执行,使用上类似于: 命令 [选项] 参数 spawn spawn 命令是 Expect 的初始命令,它用于启动一个进程,之后所有 expect 操作都在这个进程中进行,如果没有 spawn 语句,整个 expect 就无法再进行下去了,使用方法就像下面这样: spawn ssh root@192.168.0.1 在 spawn 命令后面,直接加上要启动的进程等信息 当然,如果真的不要 spawn 过程也没有关系,虽然这样就没有办法单独执行,但是这个脚本可以与任何调用它的进程进行交互。 除此之外,spawn 还支持其他选项: -open 启动文件进程,具体说明请参照下面的选项部分。 -ignore 忽略某些信号,具体说明请参照下面的选项部分。 expect 使用方法: expect 表达式 动作 表达式 动作 ……………… expect 命令用于等候一个相匹配的输出,一旦匹配就执行后面的动作,这个命令接受几个特有参数,用的最多的就是-re,表示使用正则表达式的方式匹配,使用起来就像这样: spawn ssh root@192.168.0.1 expect ―password:‖ {exp_send ―word\r‖} 从上面的例子可以看出,expect 是依附与 spawn 命令的,当执行 ssh 命令后,expect 就匹配命令执行后的关键字:password:,如果匹配到关键字就会执行后面包含在{}括号中的 exp_send 动作,匹配以及动作可以放在二行,这样就不需要使用{}括号了,就像下面这样,实际完成的功能与上面是一样的: spawn ssh root@192.168.0.1 expect ―password:‖ exp_send ―word\r‖ expect 命令还有一种用法,它可以在一个expect 匹配中同时匹配多个关键字,只需要将关键字放在一个大括号中就可以了: spawn ssh root@192.168.0.1 expect { -re ―password:‖ {exp_send ―word\r‖} -re ―...