編寫expect腳本

0、前言

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

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

 (有時候有的機器登錄也不需要密碼)

0.1expect的命令

命令 含義
spawn 調用要執行的命令
expect 等待命令提示信息的出現(捕捉用戶提示信息)
send 發送需要交互的信息來替代手工輸入
set 輸入變量的值
interact 執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。
expect eof 與spawn對應,表示捕捉終端輸出信息終止

解釋:interact 和expect eof   二者寫一個就行,必須要寫;

寫與不寫interact 和expect eof 的區別:

不寫的話,假使從服務器192.168.1.1  通過ssh登錄到 服務器192.168.1.2 ,登錄密碼自動輸入後,立馬又退回到1.1服務器;

寫上的話,登錄密碼自動輸入後,就保持在1.2服務器終端上,可以正常在1.2服務器上操作了。

0.2 

#!/usr/bin/expect    ----------->第一行告訴操作系統腳本里的代碼使用那一個shell來執行

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

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

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

1、查看本機是否裝了expect

命令:which  expect 

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

沒有裝的話,看第二步。

2、expect的安裝(需要能夠上網)

系統爲RHEL/CentOS:

sudo yum install expect

系統爲Debian/Ubuntu:

sudo apt-get install expect

 裝好目錄在/usr/bin/expect

3、expect單獨使用

4、expect 嵌套在shell中

方法1)shell中使用expect -c “expect腳本內容”來完成嵌套

  例如:test.sh中內容:

#!/bin/sh
expect -c "
expect "hello"
send "world\n"
expect eof
"

方法2)expect <<EOF ...//... EOF

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章