小型自動化運維--expect指令碼v2版
在實際運維工作中,需要我們向遠端主機同步資料,可以用rsync來實現。那麼用expect指令碼怎麼實現資料傳輸完成之後自動退出遠端主機呢?在開始expect指令碼v2版之前,我們先來看下,使用expect指令碼來實現遠端主機的登入,指令碼如下:
#! /usr/bin/expect
set host "192.168.8.120"
set passwd "wtf"
spawn ssh root@$host
expect
"password:"
}interact
注:上面指令碼不明白的童鞋,請檢視下我的51cto部落格:小型自動化運維--expect指令碼!
對上面指令碼進行擴充,即是我們現在要說的expect指令碼v2版:
#!/usr/bin/expect
set timeout -1 ##表示永不超時,timeout 0表示立即超時
set host "192.168.8.120"
set passwd "wtf"
spawn ssh root@$host
expect
"password:"
}expect "]*"
send "touch /tmp/12.txt\r"
expect "]*"
send "echo 1212 > /tmp/12.txt\r"
expect "]*"
send "exit\r"
expect eof
對帶顏色部分指令碼進行說明:
語法結構很簡單,自動登入的 expect 指令碼,增加固定語法
expect "]*"
send "command"
expect "]*"
send "command"
..........
expect "]*"
send "exit\r"
注:
(1)expect "]*" 這裡的 * 表示萬用字元
,可以是 $,也可以是 #,root 使用者的命令列提示符為 [root@localhost sbin]# , 是以 「]*」 結尾的,當 expect 指令碼遇到 「]*」 則傳送命令。
建議:這裡的符號最好是到機器上面確認一下,如果是 # ,為了標準化,也可以把統配符 *
改為 標準匹配 #。
(2)可以再 #! /usr/bin/expect 下面增加一行 set timeout 30,表示如果 30 秒還沒有連線成功,則取消嘗試。
set timeout -1 , 則表示永不超時。如果不設定 timeout ,有可能在傳輸較大的檔案的時候中斷。
最後,對檔案授予執行許可權:
[root@cacti sbin]# chmod +x 2.expect
執行結果,截圖如下:
小型自動化運維 expect指令碼
小型自動化運維 expect指令碼 expect可以讓我們實現自動登入遠端機器,並且可以實現自動遠端執行命令。知道使用者名稱和密碼或者是使用金鑰驗證都可以使用,下面介紹expect 指令碼實現登陸和遠端命令 yum install y expect openssh clients 依賴 ssh 通訊...
小型自動化運維 expect指令碼之傳遞函式
小型自動化運維 expect指令碼之傳遞函式 root shiyanji vim 3.expect usr bin expect set user lindex ar 0 set host lindex ar 1 set passwd wtf set cm lindex ar 2 spawn ssh...
Linux 自動化運維之expect
expect是乙個自動化互動套件,主要應用於執行命令和程式時,系統以互動形式要求輸入指定字串,實現互動通訊。expect自動互動流程 spawn啟動指定程序 expect獲取指定關鍵字 send向指定程式傳送指定字元 執行完成退出.注意該指令碼能夠執行的前提是安裝了expect yum instal...