導(dǎo)航:
一、expect安裝、介紹、使用場(chǎng)景二、expect使用原理三、expect使用語(yǔ)法四、expect使用舉例五、expect相關(guān)錯(cuò)誤處理
- - - - - - - - - 分割線 - - - - - - - - - - 一、expect安裝介紹1.expect命令安裝:安裝語(yǔ)句:yum install expect2.expect命令含義:
expect是一種腳本語(yǔ)言,它能夠代替人工實(shí)現(xiàn)與終端的交互,主要應(yīng)用于執(zhí)行命令和程序時(shí),系統(tǒng)以交互形式要求輸入指定字符串,實(shí)現(xiàn)交互通信 。
3.expect使用場(chǎng)景:
(1)并根據(jù)預(yù)定標(biāo)準(zhǔn)回答其問(wèn)題,回答“是”、“否”或?qū)⒖刂茩?quán)交還給您
(2)遠(yuǎn)程連接設(shè)備并執(zhí)行自動(dòng)化操作
(3)主要是一些需要人機(jī)交互的地方,如果提前知道應(yīng)該輸入什么指令都可以使用expect 工具
二、expect使用原理
1.原理介紹:
spawn啟動(dòng)指定進(jìn)程—expect獲取指定關(guān)鍵字—send向指定程序發(fā)送指定字符—執(zhí)行完成退出
2、spawn命令介紹:
spawm命令就是用來(lái)啟動(dòng)新的進(jìn)程的 。spawn后的send和expect命令都是和spawn打開(kāi)的進(jìn)程進(jìn)行交互的、
3、send命令介紹:
send命令接收一個(gè)字符串參數(shù),并將該參數(shù)發(fā)送到進(jìn)程,這個(gè)過(guò)程類(lèi)似模擬人類(lèi)輸入密碼
4、interact命令介紹:
結(jié)合spawn、expect、send自動(dòng)化的完成很多任務(wù),interact命令可以在適當(dāng)?shù)臅r(shí)候進(jìn)行任務(wù)的干預(yù),比如下載完ftp文件時(shí),仍然可以停留在ftp命令行狀態(tài),以便手動(dòng)的執(zhí)行后續(xù)命令
三、expect使用語(yǔ)法
1. expect 啟用選項(xiàng):
-c 執(zhí)行腳本前先執(zhí)行的命令,可多次使用-d debug模式,可以在運(yùn)行時(shí)輸出一些診斷信息,與在腳本開(kāi)始處使用exp_internal 1相似 。-D 啟用交換調(diào)式器,可設(shè)一整數(shù)參數(shù) 。-f 從文件讀取命令,僅用于使用#!時(shí) 。如果文件名為"-",則從stdin讀取(使用"./-"從文件名為-的文件讀取) 。-i 交互式輸入命令,使用"exit"或"EOF"退出輸入狀態(tài)-- 標(biāo)示選項(xiàng)結(jié)束(如果你需要傳遞與expect選項(xiàng)相似的參數(shù)給腳本時(shí)),可放到#!行:#!/usr/bin/expect ---v 顯示expect版本信息2.expect命令參數(shù):
spawn 交互程序開(kāi)始,執(zhí)行后面的命令或程序 。需要進(jìn)入到expect環(huán)境才可以執(zhí)行,不能直接在shell環(huán)境下直接執(zhí)行set timeout n 設(shè)置超時(shí)時(shí)間,表示該腳本代碼需在n秒鐘內(nèi)完成,如果超過(guò),則退出 。用來(lái)防止ssh遠(yuǎn)程主機(jī)網(wǎng)絡(luò)不可達(dá)時(shí)卡住及在遠(yuǎn)程主機(jī)執(zhí)行命令宕住 。如果設(shè)置為-1表示不會(huì)超時(shí)set 定義變量$argv expect腳本可以接受bash的外部傳參,可以使用[ lindex $argv n ]n為0表示第一個(gè)傳參,為1表示第二個(gè)傳參,以此類(lèi)推expect 從交互程序進(jìn)程中指定接收信息, 如果匹配成功, 就執(zhí)行send的指令交互;否則等待timeout秒后自動(dòng)退出expect語(yǔ)句send 如果匹配到expect接受到的信息,就將send中的指令交互傳遞,執(zhí)行交互動(dòng)作 。結(jié)尾處加上\r表示如果出現(xiàn)異常等待的狀態(tài)可以進(jìn)行核查exp_continue 表示循環(huán)式匹配,通常匹配之后都會(huì)退出語(yǔ)句,但如果有exp_continue則可以不斷循環(huán)匹配,輸入多條命令,簡(jiǎn)化寫(xiě)法 。exit 退出expect腳本expect eof spawn進(jìn)程結(jié)束后會(huì)向expect發(fā)送eof,接收到eof代表該進(jìn)程結(jié)束interact 執(zhí)行完代碼后保持交互狀態(tài),將控制權(quán)交給用戶 。沒(méi)有該命令執(zhí)行完后自動(dòng)退出而不是留在遠(yuǎn)程終端上puts 輸出變量
四、expect使用舉例
1.expect腳本實(shí)現(xiàn)ssh自動(dòng)登錄遠(yuǎn)程服務(wù)器
#!/usr/bin/expectspawn ssh mrswhite@192.168.37.9expect "*password:"send "test20221007\r"expect "*#"interactexpect expect_demo1.sh 執(zhí)行查看運(yùn)行結(jié)果:

文章插圖
2.expect腳本實(shí)現(xiàn)ssh自動(dòng)登錄遠(yuǎn)程服務(wù)器(通用腳本,手動(dòng)輸入?yún)?shù))
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
- 掌中之物電視劇播出時(shí)間
- liunx之expect操作詳解
- 心理陰毒人的特征
- 原神尋星之旅第七天怎么通關(guān)
- 花亦山心之月陰錯(cuò)陽(yáng)差第二天怎么通關(guān)
- 咸魚(yú)之王大亂斗怎么玩
- 復(fù)聯(lián)4之后的漫威電影
- 少年陰陽(yáng)師之十二神將
- 敬而遠(yuǎn)之和避而遠(yuǎn)之哪個(gè)好
- 939597汽油區(qū)別
