使用expect實現shell自動交互


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM