expect 是一個自動交互功能的工具。expect 是開了一個子進程,通過 spawn 來執行 shell 腳本,監測到腳本的返回結果,通過 expect 判斷要進行的交互輸入內容。
expect 基本命令
spawn調用要執行的命令expect等待命令提示信息的出現,用於捕捉用戶輸入的提示send發送需要交互的值,替代了用戶手動輸入內容set設置變量值interact執行完成后保持交互狀態,把控制權交給控制台。如果沒有這一句登錄完成后會退出,而不是留在遠程終端上expect eof這個一定要加,與spawn對應表示捕獲終端輸出信息終止expect腳本必須以interact或expect eof結束,執行自動化任務通常expect eof就夠了
腳本演示
登陸到遠程服務器 * 文件名稱為 example_1.sh
#!/usr/bin/expect
set timeout 5
set server [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
spawn ssh -l $user $server
expect {
"(yes/no)" { send "yes\r"; exp_continue }
"password:" { send "$passwd\r" } }
expect "*Last login*" interact
./example_1.sh 192.168.1.68 root 123456
#!/usr/bin/expect 聲明使用 expect 解釋腳本
set timeout 5 設置超時時間為 5 秒,如果要執行的 shell 命令很長可以設置超時時間長一些
set server [lindex $argv 0] 將命令行第一個參數賦值到 server 變量上
expect {} 多行期望,匹配到哪條執行哪條,這里的腳本執行后預期結果是不固定的,有可能是詢問是yes/no,有可能是去輸入密碼,所以可以使用 expect{}
send "yes\r" 發送需要交互的值 yes 並以回車結束
本文由個人 hexo 博客 co2fe.com 遷移
date: 2018-09-02 09:12:01
