在Linux環境中爲了實現某些功能,需要手工輸入相關的參數,進行人機交互,如遠程登錄等。Expect是一個免費的編程工具語言,能實現自動執行人機交互。
下面給出一個實現SSH自動遠程登錄的例子
代碼:
#/usr/bin/expect
set hostname [lindex $argv 0]
set passwd [lindex $argv 1]
spawn ssh $hostname
expect {
"*password:*" { send "passwd\r" }
"*es/no)?" {send "yes\r" exp_continue }
}
interact
1)#/usr/bin/expect
指定用來執行該腳本的命令程序
2)set hostname [lindex $argv 0]
獲得腳本的執行參數保存在數組$argv中,從0號開始是參數,並將其保存到變量hostname中。
3) spawn ssh $hostname
spawn在expect中用於啓動一個新線程,用來傳遞交互指令。本程序就是去執行ssh $hostname 命令;
4)expect 和 send
expect和send命令用來實現交互過程。expect 判斷標準輸出,從輸出的信息中查詢你想要匹配的字符串如“*password:*”,存在則執行後面的名利,否則忽略。exp_continue功能相當於C語言中的continue。send執行交互操作,與手工輸入等效。
5)interact
執行完成後保持交互狀態,把控制權交給控制檯,留在遠程登錄的終端上,如果沒有這一句登錄完成後會退出。