红联Linux门户
Linux帮助

Linux下Expect命令应用

发布时间:2014-08-11 09:21:43来源:linux网站作者:xubcing

在安装好expect 和tcl后,我们就可向各个主机中执行相同的命令了,实际上也就是执行的TCL脚本,如下就是一个TCL脚本。


expect.tcl脚本逻辑:

1) 先SSH到所要的执行命令的主机 ,spawn ssh $user@$hostname

2) 然后在执行shell命令,脚本中执行的 是 函数exec_shell_command

3)脚本中log 为执行日志函数


expect.tcl

#!/usr/local/bin/expect
    
###set log file handle
set timeout 5
set systemTime [clock seconds]
set file "tcl.log"
set fileid [open $file a]
seek $fileid 0 start
    
###set the arguments
set hostname [lindex $argv 0]    #主机名
set user [lindex $argv 1]        #用户名
set passwd [lindex $argv 2]      #密码
    
proc exec_shell_command {} {     #执行命令函数
send "rm -f xubc.log\r"
log "commands  completed..."
}
proc log {msg} {                 #写日志函数
global fileid
set systemTime [clock seconds]
puts $fileid "[clock format $systemTime -format %H:%M:%S] --- $msg"
}
log "$hostname begin....."
if {$argc != 3} {
log $argc
log $argv
log "Usage: error arguments.\n "
} else {
spawn ssh $user@$hostname
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
log "Login $hostname Successfully..."
exec_shell_command
}
log "exit $hostname..."
send "exit\r"
log "$hostname end... "
expect eof


主机名:master  用户:Hadoop  密码:123456

执行脚本的命令:

expect  expect.tcl  master  hadoop 123456

再有上面的基础脚本后,对于多台服务器配置,我们可以把服务器信息的写入配置文件


server.lst

master hadoop 123456
slave1 hadoop 123456
slave2 hadoop 123456
slave3 hadoop 123456


最后通过一个shell脚本,读取server.lst来完成每台机器的配置,实例中是 创建一个xubc.log的文件


expect.sh

#!/bin/bash
while read line
do
echo expect expect.tcl $line;
expect expect.exp $line
done < server.lst

sh expect.sh  将分别在每台服务器当前用户目录下创建 名为xubc.log 的文件,相关日志文件会在tcl.log中。