TCL中Expect 交互的學習小結



Expect作爲一種重要的TCL擴展包,主要有以下幾個命令:

  1. 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腳本執行即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章