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