Expect作为一种重要的TCL扩展包,主要有以下几个命令:spawn用于启动一个进程,之后所有expect操作都在这个进程中进行。
如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命 令的。所以不要用 “which spawn“之类的命令去找spawn命令。spawn ssh root@135.251.193.217
spawn telnet 135.251.193.217
2. expect & exp_sendexpect "password:"
exp_send "word\r"
也可以在一个expec中匹配多个关键字expect -re "password:" { exp_send "word\r" }
-re "noresponse" {}
读到noresponse,会退出expect
3. 关于exp_send 和 send
exp_send可发送一些特殊符号 \r, \n, \t
4. 关于exp_continueexpect -re "password:" { exp_send "word\r";exp_continue}
-re "noresponse" {}
exp_continue会使匹配第一个关键字后从头开始再匹配第二个关键字
5. exp_pid 用来获取当前spawn的id
6. set timeout 30
用以设置expec等待超时时间
7. close -id
杀死对应的spawn_id的进程。
8 interact
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
举例:脚本自动上传log#!/usr/bin/expect
spawn scp [lindex $argv 0] root@135.251.193.219:/home
expect "root@135.251.193.219's password:" {exp_send "123456\n"}
interact
把上面保存为expect_script#!/bin/bash
for f in `ls /log/*.log`
do
expect_script $f
done
再编写如上的bash脚本执行即可。