Linux下 expect命令【应用】

上一篇   Linux下 expect命令【安装】

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

如下就是一个TCL脚本,相关语法参见 http://www.tcl.tk/man/tcl/tutorial/tcltutorial.html

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中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值