EXPECT 指令碼 批量 遠端互動

2021-09-26 05:49:28 字數 1310 閱讀 2564

在shell自動部署專案中對自動部署免去使用者互動很痛苦

expect eof 這個一定要加,與spawn對應表示捕獲終端輸出資訊終止,類似於if....endif

expect指令碼必須以interact或expect eof結束,執行自動化任務通常expect eof就夠了。

設定expect永不超時。 set timeout -1

設定expect 10秒超時,如果超過10沒有expect內容出現,退出。 set timeout 300

方括號執行了乙個巢狀命令. 例如, 如果你想傳遞乙個命令的結果作為另外乙個命令的引數, 那麼你使用這個符號。[cmd arg]

雙引號把片語標記為命令的乙個引數. "$"符號和方括號在雙引號內仍被解釋 "some stuff"

大括號也把片語標記為命令的乙個引數. 但是, 其他符號在大括號內不被解釋

反斜線符號是用來引用特殊符號. 例如:n 代表換行. 反斜線符號也被用來關閉"$"符號, 引號,方括號和大括號的特殊含義

例項安裝:

[root@localhost ~]# rpm -q expect

expect-5.45-14.el7_1.x86_64           (yum install -y expect)

例項應用

#!/bin/bash

#cmd.txt 需要終端執行命令

#ip.txt (ip password)

#190810

dos=$(cat /root/cmd.txt)

set timeout 10

cat ip.txt |while read line;do

ip=$(echo $line |cut -d' ' -f1)

passwd=$(echo $line |cut -d' ' -f2)

/usr/bin/expect << eof

spawn ssh root@$ip

expect

"password:"

}expect "]#"

send "$dos\r"

send "exit\r"

expect eof

eofdone

[root@localhost ~]# cat cmd.txt ip.txt

df -th

netstat -ntpl

192.168.50.60 redhat

192.168.50.61 redhat

192.168.50.62 redhat

expect 自動互動指令碼

命令列引數 ar 引數陣列,使用 lindex ar n 獲取,ar 0為指令碼名字 argc,引數個數 set username lindex ar 1 獲取第1個引數 set passwd lindex ar 2 獲取第2個引數 set timeout 30 設定超時 spawn是expect內...

自動遠端拷貝expect指令碼

自動遠端拷貝expect指令碼 expect自動遠端拷貝指令碼,利用rsync命令,指令碼內容如下 usr bin expect proc usage exit ifelseif else elseif elseif else else expect yes no fatal timeout no ...

expect指令碼實現批量ssh互信

搭hadoop時候需要配置多節點ssh互信,節點數量多了,手工配起來就很麻煩。網上有很多自動配置ssh互信的指令碼,但基本都不能直接用。今天摸索了下,自己寫了個簡易版,測試還能用,在這裡分享下。1 每個節點安裝expect包 yum install expect y 2 將auto ssh.sh及i...