編寫expect指令碼

2021-10-07 11:29:04 字數 1798 閱讀 1860

expect實現自動互動。如,scp,ssh,ftp、root等需要輸入密碼的互動需求;

例如ssh命令遠端登入其他主機,會要求輸入密碼

(ps:有時候有的機器登入也不需要密碼)

#!/bin/sh

echo "start"

expect -c "

expect "hello"

send "world\n"

expect eof

"echo "end"

send "world\n"-------------->此處使用\n  或者 \r都是可以的。

命令含義

spawn

呼叫要執行的命令

expect

等待命令提示資訊的出現(捕捉使用者提示資訊)

send

傳送需要互動的資訊來替代手工輸入

set設定變數的值

interact

執行完成後保持互動狀態,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登入完成後會退出,而不是留在遠端終端上。

expect eof

與spawn對應,表示捕捉終端輸出資訊終止

說明:1)interact 和expect eof   二者寫乙個就行,二者區別參考本文。

2)寫與不寫interact 或expect eof 的區別:

3)spawn 後面對應的是命令

4)expect  「password」        ------------------>注意字串要加引號,引號中是包含的字串就行,不用寫全;

5)send  "mima\r"                ------------------->傳送的字串要加引號,並且一定要加 \r  ,表示回車,否則一直在等待send的內容。

6)等待時間設定

#!/usr/bin/expect    ----------->第一行告訴作業系統指令碼裡的**使用那乙個shell來執行

set timeout -1          ----------->設定expect永不超時

set timeout 10         ------------>設定expect10s超時,如果超過10s,沒有expect內容出現,則會退出

expect 預設的時間是10s, 這個地方可以根據需求更改。

命令:which  expect 

如果裝了,會顯示expect 的目錄

沒有裝的話,看第二步。

系統為rhel/centos:

sudo yum install expect
系統為debian/ubuntu:

sudo apt-get install expect
裝好目錄在/usr/bin/expect

#!/usr/bin/expect

set timeout 30

spawn ssh [email protected]

expect "password:"

send "pass\r"

expect eof

單獨使用expect 第一行寫的是       #!/usr/bin/expect

expect "password:"   -------->判斷上次輸出結果裡是否包含「password:」的字串,如果有則立即返回,否則就等待一段時間後返回,這裡等待時長就是前面設定的30秒

Mac利用expect編寫自動執行指令碼

在公司中登入docker機需要手動輸入密碼非常麻煩,因此可以用expect編寫指令碼利用指令碼自動登入。1 安裝brew 若已安裝可省略 brew 是 mac 下的乙個包管理工具,類似於 centos 下的 yum,可以很方便地進行安裝 解除安裝 更新各種軟體包 ruby e curl fssl 2...

expect指令碼解釋

使用expect實現自動登入的指令碼,網上有很多,可是都沒有乙個明白的說明,初學者一般都是照抄 收藏。可是為什麼要這麼寫卻不知其然。本文用乙個最短的例子說明指令碼的原理。指令碼 如下 usr bin expect set timeout 30 spawn ssh l username 192.168...

expect 自動互動指令碼

命令列引數 ar 引數陣列,使用 lindex ar n 獲取,ar 0為指令碼名字 argc,引數個數 set username lindex ar 1 獲取第1個引數 set passwd lindex ar 2 獲取第2個引數 set timeout 30 設定超時 spawn是expect內...