Expect 非互動式控制工具

2021-10-23 23:14:22 字數 1837 閱讀 4537

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 通過迴圈批量操...