expect常用方法shell

1. #!/usr/bin/expect

告訴操作系統腳本里的代碼使用那一個 shell 來執行。這裏的 expect 其實和 Linux 下的 bash、windows 下的 cmd 是一類東西。

注意:這一行需要在腳本的第一行,從而告知操作系統採用 expect 作爲 shell 執行腳本。

注意:當使用 #!/usr/bin/expect -d 時,expect 腳本將運行在調試模式,屆時腳本執行的全過程將被展示出來。

2. set timeout

設置超時時間,計時單位是:秒,timeout -1 爲永不超時。

例如:set timeout 30 爲設置超時時間爲 30 秒。則當某個 expect 判斷未能成功匹配的 30 秒後,將跳過該 expect 判斷,執行後續內容。

3.spawn 

它主要的功能是給運行進程加個殼,用來傳遞交互指令

spawn 是進入 expect 環境後纔可以執行的 expect 內部命令,如果沒有裝 expect 或者直接在默認的 shell 下執行是找不到 spawn 命令的。所以不要用 “which spawn“ 之類的命令去找 spawn 命令。好比在 windows 裏的 dir 就是一個內部命令,這個命令由 shell 自帶,你無法找到一個 dir.com 或 dir.exe 的可執行文件。

例如:spawn ssh -l username 192.168.1.1 將爲 ssh -l username 192.168.1.1 加殼,屆時該命令的交互指令將可以被處理。

4.expect

這裏的 expect 是 expect 的一個內部命令,需要在 expect 環境中執行。該命令用於判斷交互中上次輸出的結果裏是否包含某些字符串,如果有則立即返回。否則如果有設置超時時間,則等待超時時長後返回。

例如:expect "password:" 爲判別交互輸出中是否包含 "password:" 字符串。

5.send

該命令用於執行交互動作,與手工輸入動作等效。

注意: 命令字符串結尾別忘記加上 "\r"(換行符),如果出現異常等待的狀態可以覈查一下。

例如:send "ispass\r" 爲交互中輸入 "is pass\r"。

6.interact

執行完成後保持交互狀態,把控制權交給控制檯,這個時候便可以手工操作。如果沒有該命令,命令完成後即退出。

7.$argv 參數數組

expect 腳本可以接受從 bash 傳遞過來的參數。

其中通過 [lindex $argv n] 可以獲得第 n 個參數的值,通過 [lrange $argv a b] 可以獲取 a-b 的參數值。

例如:編寫 test.sh 腳本,內容如下。

#!/usr/bin/expect

set timeout 2 

set username [lindex $argv 0] 

set password [lindex $argv 1] 

set hostname [lindex $argv 2] 

spawn /usr/bin/ssh $username@$hostname

expect {

"yes/no"

{send "yes\r"; exp_continue;}

"Password:"

{send "$password\r";}

}

expect eof

則通過調用腳本 ./test.sh oracle password 192.168.87.1 可以使用 oracle 用戶以密碼 password 登錄 192.168.87.1,腳本最後自動登出

8.exp_continue

exp_continue 附加於某個 expect 判斷項之後,可以使該項被匹配後,還能繼續匹配該 expect 判斷語句內的其他項。exp_continue 類似於控制語句中的 continue 語句。

例如:下例將判斷交互輸出中是否存在 yes/no 或 *assword。如果匹配 yes/no 則輸出 yes 並再次執行判斷;如果匹配 *assword 則輸出 123abc 並結束該段 expect 語句。

expect {

    \"yes/no\" {send \"yes\r\"; exp_continue;}

    \"*assword\" {set timeout 300; send \"123abc\r\";}

}

注意:exp_continue [-continue_timer] 默認情況下 exp_continue 會重高超時時鐘,-continue_timer 選項會阻止時鐘重新計數(連續計數)。

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