1.expect是什么,在什么情況下使用
執(zhí)行shell腳本的時(shí)候,有時(shí)會(huì)有交互步驟枫慷,必須輸入指令才能繼續(xù)往下執(zhí)行,expect腳本可以自己判斷在某些情況下輸入某些命令浪规,這樣就可以實(shí)現(xiàn)腳本全自動(dòng)化或听。
2.expect基本語法
expect主要有四個(gè)命令:
spawn:?jiǎn)?dòng)執(zhí)行命令或腳本
expect:從進(jìn)程中獲取字符串
send:根據(jù)expect獲取的字符串,向進(jìn)程發(fā)送一個(gè)字符串
interact:退出自動(dòng)化笋婿,允許用戶交互誉裆。
3.expect實(shí)例
#!/usr/tcl/bin/expect?
set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
#!/usr/tcl/bin/expect:使用expect來解釋腳本
set timeout 30:設(shè)置超時(shí)時(shí)間,單位秒缸濒,默認(rèn)10
set host "101.200.241.109":設(shè)置變量
spawn ssh $username@$host:spawn是expect的內(nèi)部命令足丢,只有在進(jìn)入expect環(huán)境才可執(zhí)行,在默認(rèn)的shell環(huán)境下不識(shí)別此命令庇配,用于給要執(zhí)行的命令加個(gè)交互模式霎桅,使得之后的運(yùn)行可以進(jìn)行自動(dòng)化交互
expect "*password*":expect是expect的內(nèi)部命令,用來從進(jìn)程中獲取和匹配指定的字符串讨永,若匹配到則進(jìn)行交互滔驶,一般和send配合使用;若沒有匹配到卿闹,則繼續(xù)匹配揭糕,但超時(shí)時(shí)間到的話則自動(dòng)交互。
send "$password\r":當(dāng)expect匹配到字符串時(shí)锻霎,就進(jìn)行交互著角,發(fā)送字符串給進(jìn)程。
interact:進(jìn)程執(zhí)行完之后旋恼,保持交互狀態(tài)吏口,退出自動(dòng),將控制交給控制臺(tái),用戶就可手動(dòng)交互产徊。