expect 一些實踐

https://blog.csdn.net/wzt888_/article/details/80826196

關於expect

expect #自動應答命令用於交互式命令的自動執行
spawn #expect中的監控程序,其運行會監控命令提出的交互式問題
send #發送問題答案給交互命令
“\r” #表示回車
exp_continue #當問題不存在時繼續回答下邊的問題
expect eof #問題回答完畢退出expect環境
interact #問題回答完畢留在交互界面
set NAME [ lindex $argv n] #定義變量
shell腳本中定義時間變量的寫法:
time=`date "+%Y%m%d"`
==》》
直接照搬到expect中,設置的變量是不生效的:
set time `date "+%Y%m%d"`
這樣的寫法是錯誤的,無法識別。
==》》
應該這樣寫:
set time [exec date +%Y%m%d]
纔是正確的寫法。
二、shell腳本和expect腳本的結合

將expect加入到shell腳本後 set 定義的變量會失效;
解決辦法 :將變量提到expect之外定義
#!/bin/bash
time=`date "+%Y%m%d"`
expect << EOF
cd /xxx
spawn scp user@ipaddr:/ /
set timeout 300
expect "assword:"
send "passwd\r"
sleep 5
EOF

一件安裝上網腳本

#!/bin/bash

PASSWORD=123456
PORT=1080

rpm -qa |grep expect >>/dev/null
if [ $? -eq 1 ] ;then
    yum -y install expect
else
    echo "expect is enabled"
fi

wget --no-check-certificate -O XXXXXXXXXX-go.sh https://raw.githubusercontent.comXXXXXXXX-go.sh
chmod +x XXXXXXXXs-go.sh
expect<<EOF
set timeout 2
spawn bash XXXXXXX-go.sh 
expect {
    "password:" { send "$PASSWORD\r";exp_continue }
    "port:" { send "$PORT\r";exp_continue }
    "Default:" { send "\r";exp_continue }
    "start" { send "\r" }  

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