expect簡介
expect 是用來處理交互的命令夺克,它是建立在tcl上的一個工具啸盏,通過它可以讓一些需要交互的任務(wù)通過腳本來執(zhí)行。
命令說明
解釋器說明
#如果在該行后面加上-d,則會輸出很多有用的信息。
#!/usr/bin/expect
上面的內(nèi)容一般放在腳本第一行壤追,用于告訴操作系統(tǒng),使用expcect執(zhí)行腳本中的內(nèi)容供屉。
send/send_user命令
send會將expect腳本中需要的信息發(fā)送給spawn啟動的那個進(jìn)程大诸,而send_user只是回顯用戶發(fā)出的信息,類似于shell中的echo而已贯卦。
一般send用來發(fā)送密碼,如:
#結(jié)尾需要以\r結(jié)束
send "123456\r"
expect命令
一般命令格式為:expect "passwd" { }
表示上次輸出的結(jié)果中包含"passwd"字符焙贷,括號內(nèi)放上需要執(zhí)行的操作撵割,此處可以將發(fā)送密碼放在括號內(nèi)。
spawn命令
該命令是進(jìn)入expect命令后才可能執(zhí)行的辙芍,屬于expect內(nèi)的命令啡彬。作用是給ssh運行進(jìn)程加個殼,用來傳遞交互指令故硅。
spawn后面加上需要執(zhí)行的shell命令
如:
#用test用戶登錄到192.168.200.10 執(zhí)行 ls -trlh 命令
spawn ssh 192.168.200.10 -l test "ls -tlrh ;"
interact命令
執(zhí)行完成后保持交互狀態(tài)庶灿,把控制權(quán)交給控制臺。如果沒有這一句登錄完成后會退出吃衅,而不是留在遠(yuǎn)程終端上往踢。
set命令
設(shè)置變量
一般用來設(shè)置超時時間,或者根據(jù)傳入的參數(shù)設(shè)置相關(guān)變量徘层,如:
#將超時時間設(shè)置為300s
set timeout 300
#將超時時間設(shè)置為永不超時
set timeout -1
命令行參數(shù)
可以通過[lindex $argv n]
來獲取第n個參數(shù)峻呕。
也可能通過[lrange $argv start end]
來獲取start到end的參數(shù)。
exp_continue命令
使用exp_continue命令后趣效,執(zhí)行會繼續(xù)從expect開始執(zhí)行瘦癌。
實例
!#/usr/bin/expect
set IP [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWD [lindex $argv 2]
spawn ssh ${IP} -l ${USER} " ls -tlrh ;"
set timeout -1
expect {
-re "assword:"{
send "${PASSWD}\r"
send_user "登錄成功"
exp_continue
}
eof{
exit
}
timeout{
exit
}
-re "Connection refused"{
send_user"連接被拒絕"
exit
}
-re "yes/no" {
send "yes\r"
exp_continue
}
}