Expect作爲一種重要的TCL擴展包,主要有以下幾個命令:
spawn用於啓動一個進程,之後所有expect操作都在這個進程中進行。
如果沒有裝expect或者直接在默認的SHELL下執行是找不到spawn命 令的。所以不要用 “which spawn“之類的命令去找spawn命令。
spawn ssh [email protected] spawn telnet 135.251.193.217
2. expect & exp_send
expect "password:" exp_send "word\r"
也可以在一個expec中匹配多個關鍵字
expect -re "password:" { exp_send "word\r" } -re "noresponse" {}
讀到noresponse,會退出expect
3. 關於exp_send 和 send
exp_send可發送一些特殊符號 \r, \n, \t
4. 關於exp_continue
expect -re "password:" { exp_send "word\r";exp_continue} -re "noresponse" {}
exp_continue會使匹配第一個關鍵字後從頭開始再匹配第二個關鍵字
5. exp_pid 用來獲取當前spawn的id
6. set timeout 30
用以設置expec等待超時時間
7. close -id
殺死對應的spawn_id的進程。
8 interact
執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。如果你只是登錄過去執行
舉例:腳本自動上傳log
#!/usr/bin/expect spawn scp [lindex $argv 0] [email protected]:/home expect "[email protected]'s password:" {exp_send "123456\n"} interact
把上面保存爲expect_script
#!/bin/bash for f in `ls /log/*.log` do expect_script $f done
再編寫如上的bash腳本執行即可。