(1)expect是建立在tcl基礎上的乙個工具,expect是用來進行自動化控制和測試的工具。主要解決shell指令碼中不可互動的問題。對於大規模的linux運維很有幫助。
(2)在linux運維和開發中,我們經常需要遠端登入伺服器進行操作,登入的過程是乙個互動到的過程,可能會需要輸入yes/no password等資訊。為了模擬這種輸入,可以使用expect指令碼。
執行安裝命令
yum install expect -y
該命令不能自動回車換行,一般要加\r(回車)
(1)expect的乙個內部命令,判斷上次輸出結果裡是否包含指定的字串,如果有則立即返回,否則就等待超時間後返回。
(2)只能捕捉由spawn啟動的程序的輸出
常用的格式:
spawn 命令
spawn passwd zhangsan
expect 「提示資訊」
expect 「輸入密碼」
send 代人工輸入的字串 \r(回車)
send 「abc123\r」
timeout:指定超時時間,過期則繼續執行後續指令
單位是:秒
timeout-1 為永不超時
預設情況下,timeout是10秒
exp_coutinue
允許expect繼續向下執行指令
send_user
回顯命令,相當於echo
$ar**引數陣列
expect指令碼可以接受從bash'傳遞的引數,可以使用[lindex $ar** n]獲得,n從0開始,分別表示第乙個、第二個、第三個......引數
expect指令碼必須以interact或expect eof結束,執行自動化任務通常expect eof就夠了
expect eof是在等待結束標誌。由spawn啟動的命令在結束時會產生乙個eof標記,expect eof即在等待這個標記。
單一分支語法
expect "password:"
多分支模式語法
send命令不具備回車換行功能,一般要加\r或\n
expect "aaa"
expect "aaa"
expect "aaa"
只要匹配了aaa或bbb或ccc中的任意乙個,執行相應的send語句後退出該expect語句
expect
"bbb"
"ccc"
}
exp_continue 表示繼續後邊的匹配,如果匹配了aaa,執行完send語句後還要繼續向下匹配bbb
expect
"bbb"
"ccc"
}
(1)直接執行[root@localhost ~]# vim de.sh
#!/usr/bin/expect //expect開始標誌
#超時時間
set timeout 60
log_file test.log
log_user 1
#引數傳入
set hostname [lindex $ar** 0]
set passwd [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
嵌入執行
Shell 程式設計之Expect免互動
四 expect 執行方式 1 expect是建立在tcl基礎上的乙個工具,expect是用來進行自動化控制和測試的工具。主要解決shell指令碼中不可互動的問題。對於大規模的linux運維很有幫助。2 在linux運維和開發中,我們經常需要遠端登入伺服器進行操作,登入的過程是乙個互動到的過程,可能...
七 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 向程序傳送字串...