shell指令碼之expect語句

2022-09-23 02:45:10 字數 1015 閱讀 8600

在編寫shell指令碼時,我們可能會遇到一些互動式的情況,如passwd、ssh等等指令碼時,常常需要手動進行互動。這樣,原本為了實現自動部署的指令碼顯得有些不大方便,這時你就會用上expect命令了。expect命令可以幫你把互動式命令變成非互動式。

expect 有期待、期望的中文意思。正如它的中文意譯一樣,它的作用就是幫你將期待的「答案」在互動時幫你加上去。當然,這個答案需要你自己去編寫。

shell中expect的相關命令:set(設定) 、spawn(引用)、expect(期待)、send(傳送)

set後接設定的變數值

例:set timeout 180 ; 設定180秒超時,即3分鐘沒有expect內容就退出指令碼。

spawn後接要執行的命令,即互動式命令(可呼叫迴圈語句)

例:passwd tom;給tom設定密碼

expect後接需要捕捉互動時的關鍵字,這裡的關鍵字指的是執行完互動式命令後出現的唯一關鍵字。例如上述passwd tom,在linux中執行後,會在互動行出現唯一關鍵字「密碼:」,在進行訊息的第一次互動後,又會在第二次互動行出現唯一關鍵字「重新」。

send後接需要互動的值,即對互動時的問題的回覆答案。例如前面的例子中對passwd tom的回答,即使用者設定的密碼,這裡以123為例

send 「123\n」 (注:\n為回車鍵)

expect和send通常放到一起使用,互動就是一問一答,expect對互動時「問」的關鍵字捕捉就充當了乙個「問」的角色,而send則是扮演了「答」的角色。

interact是expect命令完成後保持互動狀態如果。

expect eof是expect命令的結束語,它和expect的關係就像if和fi,case和esac,while和done的關係,當然也可以用interact作為結束語。

注:以下是指令碼中的expect的命令格式,因為沒有迴圈體命令所以沒有用上interact命令。expect命令是存放在/usr/bin/expect中,所以在指令碼中,我們這裡使用重定向的方式使用expect命令。expect eof命令一定要加在expect語句末尾。

shell自動互動之expect指令碼 轉

linux expect詳解 ssh自動登入 shell指令碼實現ssh自動登入遠端伺服器示例 usr bin expect spawn ssh root 192.168.22.194 expect password send 123 r expect interact expect是乙個用來處理互...

shell指令碼巢狀執行expect命令

1.expect命令說明 為避免反覆呼叫,可以巢狀執行 相關命令 spawn 啟動乙個程式或程序 send 給程序或程式返回結果 expect 接受程式或程序輸出 interact 使使用者處於程序或程式的互動狀態,ssh登入後不自動登出 2.shell中巢狀expect命令 bin bash sq...

shell指令碼之expect自動應答語言

在指令碼中寫入與系統互動時可能出現的詢問語句,然後將要回答的答案也寫入指令碼中,實現自問自答,從而實現指令碼的人機互動。expect 是自動應答命令用於互動式命令的自動執行 spawn 是 expect 中的監控程式,其執行後會監控命令提出的互動問題 send傳送問題答案給互動命令 r 表示回車 e...