歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下Expect命令應用

Linux下Expect命令應用

日期:2017/2/28 15:30:16   编辑:Linux教程

在安裝好expect 和tcl後,我們就可向各個主機中執行相同的命令了,實際上也就是執行的TCL腳本,如下就是一個TCL腳本。

expect.tcl腳本邏輯:

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

2) 然後在執行shell命令,腳本中執行的 是 函數exec_shell_command

3)腳本中log 為執行日志函數

expect.tcl

  1. #!/usr/local/bin/expect
  2. ###set log file handle
  3. set timeout 5
  4. set systemTime [clock seconds]
  5. set file "tcl.log"
  6. set fileid [open $file a]
  7. seek $fileid 0 start
  8. ###set the arguments
  9. set hostname [lindex $argv 0] #主機名
  10. set user [lindex $argv 1] #用戶名
  11. set passwd [lindex $argv 2] #密碼
  12. proc exec_shell_command {} { #執行命令函數
  13. send "rm -f xubc.log\r"
  14. log "commands completed..."
  15. }
  16. proc log {msg} { #寫日志函數
  17. global fileid
  18. set systemTime [clock seconds]
  19. puts $fileid "[clock format $systemTime -format %H:%M:%S] --- $msg"
  20. }
  21. log "$hostname begin....."
  22. if {$argc != 3} {
  23. log $argc
  24. log $argv
  25. log "Usage: error arguments.\n "
  26. } else {
  27. spawn ssh $user@$hostname
  28. expect {
  29. "yes/no" { send "yes\r";exp_continue }
  30. "password:" { send "$passwd\r" }
  31. }
  32. log "Login $hostname Successfully..."
  33. exec_shell_command
  34. }
  35. log "exit $hostname..."
  36. send "exit\r"
  37. log "$hostname end... "
  38. expect eof

主機名:master 用戶:Hadoop 密碼:123456

執行腳本的命令:

expect expect.tcl master hadoop 123456

再有上面的基礎腳本後,對於多台服務器配置,我們可以把服務器信息的寫入配置文件

server.lst

  1. master hadoop 123456
  2. slave1 hadoop 123456
  3. slave2 hadoop 123456
  4. slave3 hadoop 123456

最後通過一個shell腳本,讀取server.lst來完成每台機器的配置,實例中是 創建一個xubc.log的文件
expect.sh

  1. #!/bin/bash
  2. while read line
  3. do
  4. echo expect expect.tcl $line;
  5. expect expect.exp $line
  6. done < server.lst

sh expect.sh 將分別在每台服務器當前用戶目錄下創建 名為xubc.log 的文件,相關日志文件會在tcl.log中。

相關閱讀:Linux下Expect命令安裝 http://www.linuxidc.com/Linux/2012-10/72761.htm

Copyright © Linux教程網 All Rights Reserved