expect常用方法shell

2021-09-14 03:37:34 字數 2407 閱讀 7273

1. #!/usr/bin/expect

告訴作業系統指令碼裡的**使用那乙個 shell 來執行。這裡的 expect 其實和 linux 下的 bash、windows 下的 cmd 是一類東西。

注意:這一行需要在指令碼的第一行,從而告知作業系統採用 expect 作為 shell 執行指令碼。

注意:當使用 #!/usr/bin/expect -d 時,expect 指令碼將執行在除錯模式,屆時指令碼執行的全過程將被展示出來。

2. set timeout

設定超時時間,計時單位是:秒,timeout -1 為永不超時。

例如:set timeout 30 為設定超時時間為 30 秒。則當某個 expect 判斷未能成功匹配的 30 秒後,將跳過該 expect 判斷,執行後續內容。

3.spawn

它主要的功能是給執行程序加個殼,用來傳遞互動指令

spawn 是進入 expect 環境後才可以執行的 expect 內部命令,如果沒有裝 expect 或者直接在預設的 shell 下執行是找不到 spawn 命令的。所以不要用 「which spawn「 之類的命令去找 spawn 命令。好比在 windows 裡的 dir 就是乙個內部命令,這個命令由 shell 自帶,你無法找到乙個 dir.com 或 dir.exe 的可執行檔案。

例如:spawn ssh -l username 192.168.1.1 將為 ssh -l username 192.168.1.1 加殼,屆時該命令的互動指令將可以被處理。

4.expect

這裡的 expect 是 expect 的乙個內部命令,需要在 expect 環境中執行。該命令用於判斷互動中上次輸出的結果裡是否包含某些字串,如果有則立即返回。否則如果有設定超時時間,則等待超時時長後返回。

例如:expect "password:" 為判別互動輸出中是否包含 "password:" 字串。

5.send

該命令用於執行互動動作,與手工輸入動作等效。

注意:命令字串結尾別忘記加上 "\r"(換行符),如果出現異常等待的狀態可以核查一下。

例如:send "ispass\r" 為互動中輸入 "is pass\r"。

6.interact

執行完成後保持互動狀態,把控制權交給控制台,這個時候便可以手工操作。如果沒有該命令,命令完成後即退出。

7.$ar** 引數陣列

expect 指令碼可以接受從 bash 傳遞過來的引數。

其中通過 [lindex $ar** n] 可以獲得第 n 個引數的值,通過 [lrange $ar** a b] 可以獲取 a-b 的引數值。

例如:編寫 test.sh 指令碼,內容如下。

#!/usr/bin/expect

set timeout 2 

set username [lindex $ar** 0] 

set password [lindex $ar** 1] 

set hostname [lindex $ar** 2] 

spawn /usr/bin/ssh $username@$hostname

expect

"password:"

expect eof

則通過呼叫指令碼 ./test.sh oracle password 192.168.87.1 可以使用 oracle 使用者以密碼 password 登入 192.168.87.1,指令碼最後自動登出

8.exp_continue

exp_continue 附加於某個 expect 判斷項之後,可以使該項被匹配後,還能繼續匹配該 expect 判斷語句內的其他項。exp_continue 類似於控制語句中的 continue 語句。

例如:下例將判斷互動輸出中是否存在 yes/no 或 *assword。如果匹配 yes/no 則輸出 yes 並再次執行判斷;如果匹配 *assword 則輸出 123abc 並結束該段 expect 語句。

expect

\"*assword\"

注意:exp_continue [-continue_timer] 預設情況下 exp_continue 會重高超時時鐘,-continue_timer 選項會阻止時鐘重新計數(連續計數)。

七 shell程式設計 expect

1.expect 前言觀察ssh登入的互動現象,有些程式難以避免的需要互動。如何解決指令碼與程式的互動問題。expert就是專門解決指令碼和程式之間的互動問題 語法 spawn expect的內部命令,啟動乙個shell程式 expect 期望哪些內容 yes no 就send傳送yes。r表示回車...

Expect安裝方法

expect是基於tcl語言的一種指令碼語言,其實無論是互動還是非互動的應用場合,expect都可以大顯身手,但是對於互動式的特定場合,還非except莫屬。b 第1步 使用root使用者登入 b b 第2步 複製安裝檔案 b 在合適的位置建立乙個資料夾,例如soft 修改資料夾讀寫許可權 chmo...

expect和shell的互動

今天寫了個指令碼expect指令碼 本以為很簡單一件事 最後因為expect和shell的一些差別導致浪費了不少時間 特此記錄下 兩者互動時 expect中使用shell命令 注意 shell指令碼太常用了,省略 了shell書寫格式 兩者的變數賦值方式不同 expect中是 set variabl...