1、一般需要安裝才能用:yun install -y expect
2、是一種免費的非互動式工具 當執行有些命令還需我們輸入寫東西才能執行成功的就屬於互動式,例如 yum install 不加-y 時,我們還要輸入y才能安裝,就屬於互動式。
3、基本引數
(1)定義expect指令碼執行的shell
#!/usr/bin/expect -----類似於#!/bin/bash
(2) set timeout 30 #設定超時時間30s
(3)spawn #spawn是執行expect之後後執行的內部命令開啟乙個會話 #功能:用來執行shell的互動命令
(4)expect 相當於捕捉 #功能:判斷輸出結果是否包含某項字串(相當於捕捉返回的結果),沒有則會斷開,否則等待一段時間後返回,等待通過timeout設
(5)send #執行互動動作,將互動要執行的命令進行傳送給互動指令,命令字串結尾要加上「\r」,#—相當於回車
(6)interract #執行完後保持互動狀態,需要等待手動退出互動狀態,如果不加這一項,互動完成會自動退出
(7)expect eof #直接退出expect模式,想啥時退出就加到**
(8)exp_continue #繼續執行接下來的操作
4、例項1(這種指令碼裡用table鍵縮排,不能用空格,且指令碼的執行式為./指令碼名 執行)
#!/usr/bin/expect
spawn ssh [email protected] #spawn+要互動的命令,用expect實現非互動
expect #yes/no 就是捕捉的位置 yes為要輸入的東西,\r 回車,這些在互動式操作是都要做,這裡我們寫好局可以非互動
「password:」 ; #exp_continue 後面還有操作就要加這個,沒有了就用;結尾 像這裡
}interact #讓你還處於互動狀態
下面是 ssh 互動時的
例項2 變形
#!/usr/bin/expect
set user root
set pass 1
set ip [ lindex $ar** 0 ]
set timeout 10
spawn ssh use
r@user@
user@ip
expect
「password:」
「#」 ;
} #這種方式的可以用於密碼驗證啥的
interact
expect 「#」 捕捉到# 做下面一系列操作 ,這種方式用於非互動成功需要一系列操作
send 「useradd test\r」
send 「pwd\r」
send 「exit\r」
expect eof
6、普通shell指令碼如何用expect
#!/usr/bin/bash
pass=1
#判斷expect命令是否安裝
rpm -qa expect &> /dev/null
if [ $? -ne 0 ];then
yum install -y expect
fi#判斷主機下面是否生成秘鑰,如果沒有生成秘鑰
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -p 「」 -f ~/.ssh/id_rsa
fi#迴圈執行獲取up狀態的ip位址。
for i in do;
}expect eof
eoffi
} &wait
done
互動式命令 expect
shell儘管很強大。但是貌似無法完成互動式命令的操作,例項 ssh host 如果host而且該機沒有加入信任。手動輸入的時間需要password。這樣的情況下可以使用expect支援。下面舉個樣例來說明expect的功能與使用 功能 對集群各機器執行同樣指令 如 集群ip 為 192.168.6...
互動式 非互動式,登入式 非登入式Shell
互動式shell和非互動式shell 互動式模式 在終端上執行,shell等待你的輸入,並且立即執行你提交的命令。這種模式被稱作互動式是因為shell與使用者進行互動。這種模式也是大多數使用者非常熟悉的 登入 執行一些命令 退出。當你退出後,shell也終止了。非互動式模式 以shell scrip...
expect 指令碼中可實現非互動式操作
如何用expect自動幫你發郵件 自動互動 root localhost mail s ddd root vim sss.sh bin bash expect root server0 mail s test root eof 寫郵件 test mail hell world eof 通過迴圈批量操...