1. 程式人生 > >expect 命令:用於自動化互動指令碼的編寫

expect 命令:用於自動化互動指令碼的編寫

expect 是建立在工具控制語言(Tool Control Language,TCL)之上的一個工具,它允許你通過編寫程式來對一些日常繁瑣的任務進行有互動介面的自動化操作。在 expect 上下文環境,你可以使用一些額外的只適用於 expect 上下文環境的命令,如 spawn、send、interact 等命令。

命令 效果 例項
spawn 開啟一個會話,跟一個具體命令 spawn su root
expect 預期的輸出資訊,跟一個字串 expect “Password”
send 向程式傳送的反饋資訊,跟一個字串 send “abc123\r”
interact 開始互動 interact(返回一個新會話)

expect 預期的終端輸出。這裡預期的輸出從左往右只要存在匹配即可。它相當於 Python 的 search() 函式,而非 match() 函式。舉個例子你就明白了。

想要登陸到 root 許可權,首先觀察在普通互動模式下的效果。

在這裡插入圖片描述

在獲悉返回字串的模式後,你可以這樣寫 expect Password

,也可以這樣寫 Password:,甚至可以寫成 assw,它們對於 expect 命令而言都是一樣的。

下面的指令碼用來開啟一個遠端 ssh 會話。

#!/usr/bin/expect
spawn ssh [email protected]_addr
send "password\r"
interact

如果想要儲存並呼叫一些變數,你可以使用 set 引數進行設定。

公式
set 變數名 [lindex $argv 數字]

例項
set port [lindex $argv 1]

之前的 ssh 登陸指令碼如果加上變數會變成下面這樣。大約需要 10 秒的載入時間。

#!/usr/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh "$user\@$ip"
expect "Password:"
send "$password\r";
interact

在這裡插入圖片描述