CentOS7.0 expect實用

在shell自動部署項目中對自動部署免去用戶交互很痛苦

spawn 調用要執行的命令
expect 等待命令提示信息的出現,也就是捕捉用戶輸入的提示:
send 發送需要交互的值,替代了用戶手動輸入內容
set 設置變量值

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"

大括號也把詞組標記爲命令的一個參數. 但是, 其他符號在大括號內不被解釋 {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 {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$PASSWD\r" }
}
expect "]#"
send "$DOS\r"
send "exit\r"
expect eof
EOF
done
[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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章