expect是一個自動化交互套件,主要應用于執(zhí)行命令和程序時,系統(tǒng)以交互形式要求輸入指定字符串,實現(xiàn)交互通信。
成都創(chuàng)新互聯(lián)技術團隊10年來致力于為客戶提供成都做網(wǎng)站、網(wǎng)站建設、外貿(mào)營銷網(wǎng)站建設、成都品牌網(wǎng)站建設、成都營銷網(wǎng)站建設、搜索引擎SEO優(yōu)化等服務。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗豐富的技術團隊,先后服務、推廣了上千網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機構單位。
expect自動交互流程:
spawn啟動指定進程---expect獲取指定關鍵字---send向指定程序發(fā)送指定字符---執(zhí)行完成退出
簡單實例1:
vim test.exp ##exp是expect腳本的擴展名
#!/usr/bin/expect ##使用expect解析程序
spawn ssh root@192.168.1.5 free ##用spawn執(zhí)行ssh命令 登錄后執(zhí)行free命令
expect “*password” ##匹配獲取的字符串
send “123456\n” ##匹配后發(fā)送密碼給系統(tǒng),\n是換行
expect eof ##處理結束expect
實例2:
#!/usr/bin/expect
spawn ssh root@192.168.1.5 free
expect {
"yes/no" {exp_send "yes\r";exp_continue}
"*password" {exp_send "123456\r"}
}
expect eof
實例3:
#!/usr/bin/expect
spawn test.sh
expect {
"username" {exp_send "test\r";exp_continue}
"*password" {exp_send "123456\r";exp_continue}
"*mail*" {exp_send "lidao@163.com\r"}
}
expect eof
expect 常用 命令總結
spawn 交互程序開始 后面跟命令或者指定程序
expect 獲取匹配信息 匹配成功則執(zhí)行expect后面的程序動作
send exp_send 用于發(fā)送指定的字符串信息
exp_continue 在expect中多次匹配就需要用到
send_user 用來打印輸出 相當于shell中的echo
exit 退出expect腳本
eof expect執(zhí)行結束 退出
set 定義變量
puts 輸出變量
set timeout 設置超時時間
實例4:
#!/usr/bin/expect
if {$argc !=2 } {
puts "expect $argv0 ip command"
exit
}
set ip [lindex $argv 0]
set cmd [lindex $argv 1]
set password "123456"
spawn ssh root@$ip $cmd
expect {
"yes/no" {send "yes/r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
expect test.exp 192.168.1.5 "free -m"
實例5:ssh秘鑰認證
生成秘鑰
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
vim test.exp
#!/usr/bin/expect
if [ $argc != 2 ] {
send_user "usage: expect test.exp file host\n"
exit
}
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "123456"
spawn ssh-copy-id -i $file "-p 22 root@$host"
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
vim kk.sh 循環(huán)expect腳本
#!/bin/bash
for n in 2 3 4 5 6 7
do
expect test.exp ~/.ssh/id_dsa.pub 192.168.1.$n
done
expect操作簡單 用途明了 易學易用 不過,現(xiàn)在工作中用的不是很多,日常也多是用來輔助其他程序腳本執(zhí)行的