四、expect 執行方式
(1)expect是建立在tcl基礎上的乙個工具,expect是用來進行自動化控制和測試的工具。主要解決shell指令碼中不可互動的問題。對於大規模的linux運維很有幫助。
(2)在linux運維和開發中,我們經常需要遠端登入伺服器進行操作,登入的過程是乙個互動到的過程,可能會需要輸入yes/no password等資訊。為了模擬這種輸入,可以使用expect指令碼。
執行安裝命令
yum install -y expect
expect 指令碼中首先引入檔案,表明使用的是哪乙個shell
#!/usr/bin/expect
spawn 後面通常跟乙個命令,表示開啟乙個會話、啟動程序,並跟蹤後續互動資訊。
例:spawn passwd root
判斷上次輸出結果中是否包含指定的字串,如果有則立即返回,否則就等待超時時間後返回;只能捕捉由spawn啟動的程序的輸出;用於接收命令執行後的輸出,然後和期望的字串匹配
send:向程序傳送字串,用於模擬使用者的輸入;該命令不能自動回車換行,一般要加\r(回車)
例:case1=「密碼」
respond=「abcd123」
expect 「$case1」 或者 expect "case1"
send 「katex parse error: can't use function '\r' in math mode at position 10: response1\̲r̲" 或 expect "case2」 "case3」
}(1)expect eof
等待執行結束,退回到原使用者,與spawn對應
expect指令碼預設的是等待10s,當執行完命令後,預設停留10s後,自動切回了原使用者
(2)interact
執行完成後保持互動狀態,把控制權交給控制台,會停留在目標終端而不會退回到原終端,這個時候就可以手工操作了,interact後的命令不起作用,比如interact後新增exit,並不會退出root使用者,而如果沒有interact則登入完成後會退出,而不是留在遠端終端上。
使用interact會保持在終端而不會退回到原終端,比如切換到root使用者,會一直在root使用者狀態下;比如ssh到另一台伺服器,會一直在目標伺服器終端,而不會切回原伺服器。
expect 預設的超時時間是10秒,通過set命令可以設定會話超時時間,若不限制超時時間則應設定為-1。
例:set timeout 30
exp_continue表示允許expect繼續向下執行命令。
例:expect
「bbb」
「ccc」
}send_user表示回顯命令,相當於echo
expect指令碼可以接收從bash命令列傳遞的引數,使用[lindex $ar** n]獲得,其中n從0開始,分別表示第乙個,第二個,第三個…引數。
例:set hostname [lindex $ar** 0]
set passwd [lindex $ar**1]
[root@localhost ~]
# vim de.sh
#!/usr/bin/expect //expect開始標誌
#超時時間
settimeout 60
log_file test.log
log_user 1
#引數傳入
sethostname
[lindex $ar** 0]
setpasswd
[lindex $ar** 1]
#追蹤命令
spawn ssh root@$hostname
#捕捉資訊並且匹配,免互動執行
expect
"*password"
}#控制權交給控制台執行
interact
[root@localhost ~]
# chmod +x de.sh
[root@localhost ~]
# ./de.sh 192.168.217.132 123456
12345678910111213141516171819202122
[root@localhost ~]
# vim sa.sh
#!/bin/bash
#位置變數
hostname=
$1password=
$2/usr/bin/expect <<-eof
spawn ssh root@$
expect
"*password"
}expect
"*]#"
send "exit\r"
expect eof
eof[root@localhost ~]
# chmod +x sa.sh
[root@localhost ~]
# ./sa.sh 192.168.217.132 123456
SHell程式設計之Expect免互動
1 expect是建立在tcl基礎上的乙個工具,expect是用來進行自動化控制和測試的工具。主要解決shell指令碼中不可互動的問題。對於大規模的linux運維很有幫助。2 在linux運維和開發中,我們經常需要遠端登入伺服器進行操作,登入的過程是乙個互動到的過程,可能會需要輸入yes no pa...
七 shell程式設計 expect
1.expect 前言觀察ssh登入的互動現象,有些程式難以避免的需要互動。如何解決指令碼與程式的互動問題。expert就是專門解決指令碼和程式之間的互動問題 語法 spawn expect的內部命令,啟動乙個shell程式 expect 期望哪些內容 yes no 就send傳送yes。r表示回車...
Shell指令碼免密登陸 Expect
1 建立在tcl上的乙個工具 2 用於進行自動化控制和測試 3 解決shell指令碼中互動相關的問題。1 判斷上次輸出結果中是否包含指定的字串,如果有則立即返回,否則就等待超時時間後返回 2 只能捕捉由spawn啟動的程序的輸出 3 用於接收命令執行後的輸出,然後和期望的字串匹配。1 向程序傳送字串...