expect

来源:互联网 发布:c语言字符串最前面是0 编辑:程序博客网 时间:2024/05/29 18:04

1、expect介绍

expect是由Don Libes基于Tcl语言开发的,主要应用于自动化交互操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写载一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。

2、expect命令
格式:

expect [ -dDinN ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] -c:从命令行执行expect脚本,默认expect是交互执行。-d:可以输出调试信息。

expect中相关命令

spawn:启动新的进程send:用于向进程发送字符串expect:从进程接受字符串interact:允许用户交互exp_continue:匹配多个字符串在执行动作后加此命令

3、expect常用语法
单一分支模式语法:

expect "hi" {send "you said hi\n"}

多分子模式语法

expect "hello" {send "you said hello\n"}\"hehe"{send "you said hehe"\n}

等同于

expect {"hello" {send "you said hello\n"}"hehe" {send "you said hehe\n"}}

4、如何使用变量?
set NAME VARLUE
示例:

#!/bin/expect#set ip 192.168.0.1set user rootset passwd 123456 spawn ssh $user@$ipexpect {    "yes/no" { send "yes\n" ; exp_continue }    "password" { send "$passwd\n" }}interact

5、位置参数
set NAME [lindex $argv #]
示例:

#!/bin/expect#set ip [lindex $argv 0]set user [lindex $argv 1]set password [lindex $argv 2]spawn ssh $user@$ipexpect {    "yes/no" { send "yes\n";exp_continue }    "password" { send "$password\n" }}interact

6、如何在shell脚本中调用expect

#!/bin/bash#ip=$1user=$2password=$3expect <<eofset timeout 10spawn ssh $user@$ipexpect {    "yes/no" { send "yes\n";exp_continue }    "password" { send "$password\n" }}expect eofeof

注意:如果没有加选项interact,则expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if….endif