Linux--使用expect進行自動交互


在linux下進行一些操作時,有時需要與機器進行一些交互操作,比如切換賬號時輸入賬號密碼,傳輸文件時輸入賬號密碼登陸遠程機器等,但有時候這些動作需要在shell腳本中進行,這個時候就可以使用expect來進行自動的交互操作,從而避免需要人工干預引起的腳本中斷執行。

expect的核心命令:spawn expect send set

spawn 調用要執行的命令
expect 等待命令提示信息的出現,也就是捕捉用戶輸入的提示:
send 發送需要交互的值,替代了用戶手動輸入內容
set 設置變量值
interact 執行完成后保持交互狀態,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登錄完成后會退出,而不是留在遠程終端上。
expect eof 這個一定要加,與spawn對應表示捕獲終端輸出信息終止,類似於if....endif
(expect腳本必須以interact或expect eof結束,執行自動化任務通常expect eof就夠了。)

 

例子:建一個scp.sh腳本,用來傳輸文件

#!/bin/sh
svr="9.84.214.35"

expect <<!
spawn scp -r xman@$svr:/db2info.csv /tmp/db2info.txt
expect {
        "(yes/no)?"
                {
                        send "yes\n"
                        expect "*assword:" {send "1qaz2wsx\n"} 
                } 
        "*assword:"
                {
                        send "1qaz2wsx\n"
                } 
} 
expect "100%"
expect eof
!

執行./scp.sh就會使用賬戶xman,去登陸遠程機器,這是終端會給出提示信息問是否繼續Yes/No? 如果yes就輸入密碼,登陸成功后scp命令就開始傳文件。其中expect{}里面的代碼就是預判斷終端輸出的內容里是否有(yes/no)?,如果有就自動輸入yes,(send "yes\n");然后再判斷后面的輸出里是否含有*password:",如果有就自動輸入預置的密碼1qaz2wsx。從而達到自動進行交互的目的。

 

除了用 expect <<!  !方式(here document方式)在sh中調用expect外,當然也可以用expect -c "" 的方式在sh腳本里調用expect命令。 

 
       


免責聲明!

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



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