在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...