Expect說白了就是一個實作人機互動的指令工具,可以抓取和相應使用者輸入,也可以模拟使用者輸出。
比如你有n台伺服器需要維護,要登入到所有的伺服器上執行某項操作(如添加使用者、修改一個使用者的密碼),如果按傳統方法,一個一個去登入敲指令那就太麻煩了。可以通過expect寫成shell腳本來批量處理,具體如下:
如果系統裡沒有expect請自行到官網下載下傳安裝: http://expect.sourceforge.net/
1、建立伺服器清單配置檔案:
[[email protected] ~]# viserver_list.conf
192.168.0.10 22 root123456
192.168.0.11 22 root123456
192.168.0.12 60008root 123456
說明:配置檔案有4列,以空格分割:伺服器IP ssh端口号 使用者名 密碼
2、編寫expect腳本:
[[email protected] ~]# vidotask.exp
#!/usr/bin/expect-f
setipaddress [lindex $argv 0]
set port[lindex $argv 1]
setusername [lindex $argv 2]
set passwd[lindex $argv 3]
settimeout 30
spawn ssh$ipaddress -p$port -l$username
expect{
"yes/no" {send "yes\r";exp_continue }
"password:" { send"$passwd\r" }
}
expect -re"\](\$|#) "
send"touch test \r"
expect -re"\](\$|#) "
send"exit\r"
說明:這裡隻實作了登入伺服器後在目前目錄建立了一個test檔案,具體需求請自行修改添加指令
3、批量執行
其實隻要寫好第2步的腳本就可以通過下面指令執行一台伺服器的處理:
[[email protected] ~]# expect dotask.exp 192.168.0.10 22 root 123456
但為了能批量處理n台,再寫個shell腳本就行了,如下:
[[email protected] ~]# vi doexcute.sh
#!/bin/bash
filename=" server_list.conf "
while read line
do
#echo $line;
expect dotask.exp $line
done <$filename
說明:讀取配置檔案,循環執行
最後,其他具體的使用方法參見expect手冊
=================================================
實用工具:autoexpect
=================================================
如果自己懶得寫expect代碼,則可以用autoexpect生成。autoexpect工具是用expect寫成的一個工具腳本,它可以錄制你執行的操作、指令、鍵盤輸入等等,之後自動生成expect腳本。
autoexpect腳本代碼見: http://blog.sina.com.cn/s/blog_5432f2730100vcqn.html
使用方法:
1、把上面連結裡的autoexpect代碼儲存成檔案:autoexpect.exp
2、執行下面指令進行錄制:
[[email protected] ~]# expectautoexpect.exp -p
說明:執行完上面指令後就可以進行你需要的操作了,需要結束錄制時,用exit退出即可。
3、錄制完後,會在目前目錄生成一個script.exp檔案,這個檔案就是錄制好的expect腳本了。是直接拿來使用,還是再改改,或是學習用,就看你自己的需要了。
===========================================================================================
Expect是一個免費的程式設計工具語言,用來實作自動和互動式任務進行通信,而無需人的幹預。Expect的作者Don Libes在1990年開始編寫Expect時對Expect做有如下定義:Expect是一個用來實作自動互動功能的軟體套件(Expect [is a] software suite for automating interactive tools)。使用它系統管理者的可以建立腳本用來實作對指令或程式提供輸入,而這些指令和程式是期望從終端(terminal)得到輸入,一般來說這些輸入都需要手工輸入進行的。Expect則可以根據程式的提示模拟标準輸入提供給程式需要的輸入來實作互動程式執行。甚至可以實作實作簡單的BBS聊天機器人。 :)
Expect是不斷發展的,随着時間的流逝,其功能越來越強大,已經成為系統管理者的的一個強大助手。Expect需要Tcl程式設計語言的支援,要在系統上運作Expect必須首先安裝Tcl