巧用linux expect命令例子

來源:互聯網
上載者:User


前言

前段時間將工作用的機器換成了 Ubuntu + 128G SSD + 8G記憶體的台式機,終於走上了用linux辦公的道路,總的說來,Ubuntu用起來還是比我想象的順暢得多,其“apt-get式”的包管理方式,安裝軟體非常方便,apt-get install xxx 即可安裝。唯一的缺點就是銀行的“U盾”等不支援linux,所以,使用網銀時略有不便。
言歸正傳,在換台式後公司還做了一件事就是統一了公司內的測試環境,將所有的測試環境機器統一到機房內用虛擬機器的方式統一管理(皆大歡喜)。為了以後開發測試方便,項目組申請了多套測試環境,比如:開發環境:用於開發人員每次迭代自測時的環境。測試環境:穩定的和線上代碼同步的測試環境,通常用於示範或者對測試環境其他應用提供服務。除此以外,還有一套效能測試環境。這麼多環境的問題就導致,每次需要更新環境:update 代碼,重啟tomcat時都需要ssh到某台機器上。這其實是一個浪費時間的重複性勞動,通常情況,這種事情都可以使用代碼解決。這就是我們今天的主角:expect。

Expect詳解


expect命令簡單說就是通過其內建的各種命令實現在互動式軟體中自動互動的工具。wiki:http://zh.wikipedia.org/zh/Expect
用在ssh時,可以配合spawn命令實現ssh的自動登入。又因為可以在指令碼中編寫判斷,賦值等邏輯,具有很高的靈活性。

demo執行個體如下:

#!/usr/bin/expect -f ##聲明使用哪種解析器解析該指令碼,如果沒有安裝expect的話,使用apt-get install expect安裝
 
if { [llength $argv] < 1 } { ##$argv為執行該指令碼是的參數數組,判斷長度,以決定是否繼續
puts "Usage: $argv0 need ssh ip" //expect中的echo,System.out.println()
exit 1
}
 
set envs [lindex $argv 0] ##將數組中的第一個參數賦值給 envs
 
set timeout 30 //設定等待終端響應的逾時時間為30秒
if { $envs == 61 } { ##注意 if和{間有個空格,{和$envs間有個空格,等號前後有空格,61後有空格,}{間有空格!!!
set ips xxx.xx.xxx.61
}
 
if { $envs == 141 } {
set ips xxx.xx.xxx.141
}
 
if { $envs == 136 } {
set ips xxx.xx.xxx.136
}
spawn ssh root@$ips ##執行ssh命令實現登陸
expect {
 
##第一次登陸的時候,會詢問是否有在本地儲存該密鑰,仔細的你應該發現,這裡的匹配是用正則的,簡答說,只匹配connecting也是可以的。
"Are you sure you want to continue connecting (yes/no)?" {send "yes\r"}
"password:" {send "cdyanfa\r"}##儲存過一次後,就會直接返回要求輸入密碼的階段了。使用send 命令發送密碼。
}
 
interact ##是Expect用來開啟使用者與產生進程之間通訊的命令,簡單說就是登陸以後將遠程伺服器的終端保持在當前終端,而不是將遠程終端關掉。
短短几行命令就將每天重複N次的操作簡化成一行了,對於提高效率很有用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.