Linux Shell互動式自動化運維程式
Expect 是 作業系統下的一個用來處理 互動 操作,系統預設是沒有安裝expect庫,所以執行expect會提示找不到命令,需要手動安裝,其它安裝也比較簡單,可以透過二進位制原始碼包編譯配置進行安裝,也可以透過網路藉助yum源來安裝,yum源安裝比較簡單;我們下面藉助Expect庫來實現Linux互動式自動化運維操作,只需要執行指令碼就可以實現自動化運維操作,不需要手動輸入一些資訊按確定,我們可以將互動過程寫在一個指令碼上,使之自動化完成。我們可以透過expect實現ssh自動登入、ftp自動登入、自動傳輸檔案、自動建立和刪除使用者等都符合互動式自動化運維。下面我們會透過一些案例來展現結果,我們透過以下幾個命令來介紹四個基礎命令。
Linux 在企業中應用還是比較廣泛,而且expect是一個免費的程式設計工具語言,用來實現自動和互動式任務進行通訊,而無需人的干預。expect是不斷的更新,隨著時間的流逝,其功能越來越強大,對Linux有基本的瞭解都知道這個命令,而且是Linux作業系統管理員必不可少的一個命令,常用的shell指令碼都需要用到這個工具,可以省去運維大量的操作時間,有利於提高工作效率,如果對Linux不太瞭解的可以去購物平臺去搜劉遄老師的 這本書學習,書籍內容比較適合初學者,也有好多案例比較適合企業常用的一些操作,expect需要Tcl程式語言的支援,要在系統上執行expect必須首先安裝Tcl。
我們透過yum源來簡單的介紹下expect需要安裝哪幾個庫,如果要透過二進位制tar.gz包安裝也可以,需要去下載expect.tar.gz安裝包,這裡就不介紹了,操作如下:
# yum install expect.x86_64 expect-devel.x86_64 -y
下面詳細的解釋四個基礎命定,expect中最關鍵的四個命令是:send,expect,spawn,interact。
1 、send:用於向程式傳送字串;
2 、expect:從程式接收字串;
3 、spawn:啟動新的程式;
4 、interact:允許使用者互動;
1. send 命令
send 命令接收一個字串的引數,並且將該引數傳送到程式。
[root@zbox ~]# expect
expect1.1> send "hello world\n"
hello world
expect1.2>
2. expect 命令
expect 命令和send命令執行的結果正好相反,expect是用來等待一個程式的反饋訊息,expect可以接收一個字串引數,也可以接收正規表示式引數,一般都是與send命令結合使用才能看到明細的效果,下面我們可以用一個最簡單的互動式的案例來展示效果:
expect "hi\n"
send "hello there!\n"
上面兩行程式碼的意思是:從標準輸入中等到hi和換行鍵後,向標準輸出輸出hello there。
Expect 還有一種最常用的語法是來自tcl語言的模式-動作,這種語法在shell中應用極其靈活,使用也非常方便,下面我們就各種語法用案例來說明
expect "hello" {send " hello "}
3. spawn 命令
上面的所有案例都是和標準輸入輸出進行互動,但是我們更希望他可以和某一個程式進行互動。spawm命令就是用來啟動新的程式的。spawn後的send和expect命令都是和spawn開啟的程式進行互動的。結合上面的send和expect命令我們可以實現一個更復雜點的shell程式。
# vim test.sh
set timeout -1 // 設定永不超時;
spawn ssh -p 22 root@192.168.3.9 // 開啟新的程式ID,該程式的使用者連線遠端ssh伺服器;
expect "*Password" // 程式返回Password時;
send "password\r" // 向程式輸入password\r,這裡是輸入是root使用者的密碼
下面是測試指令碼的結果:
這段程式碼的作用是實現登入到ssh伺服器192.168.3.9的root賬號上,這段shell程式碼中用到interact,下面我們就來詳細的介紹這個命定;
4.interact
到現在為止,我們已經可以結合spawn、expect、send自動化的完成很多工了。但是,如何讓人在適當的時候干預這個過程了。比如ssh登入到伺服器上面要執行什麼操作,仍然可以停留在ssh伺服器登入狀態,以便手動的執行後續命令。interact可以達到這些目的。下面的案例是在自動登入ssh伺服器後,允許使用者互動操作。
#!/usr/bin/expect
spawn ssh root@192.168.3.9
expect "*password:"
send "password\r"
spawn sleep 10
interact
exit
這個案例其實和上面這個差不多,但是這個多了一個自動退出功能,設定登入成功10s後自動退出。
Expect 在shell中也是一個比較複雜的庫,如果想深入的瞭解,自己也要多結合理論和實踐操作一起進行,這樣學習起來還是比較快的,還可以透過shell實現簡單的控制功能,如:迴圈、判斷等。但是對於需要互動的場合則必須透過人工來干預,有時候我們可能會需要實現和互動程式如ssh伺服器等進行互動的功能,而expect就使用來實現這種功能的工具,希望本文章會給大家有所幫助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2643124/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux Shell自動互動Linux
- linux透過shell指令碼實現ssh互動式自動化Linux指令碼
- IT運維之自動化運維運維
- 自動化運維 Expect運維
- 用自動化運維工具解放IT運維運維
- 自動化運維 Ansible運維
- Python自動化運維之高階函式薦Python運維函式
- [Linux]Ansible自動化運維② - 工具與模組Linux運維
- mysql-inception自動化運維MySql運維
- Ansible自動化運維工具運維
- 什麼是自動化運維?為什麼選擇Python做自動化運維?運維Python
- 函式計算進行自動化運維專題函式運維
- [Linux]Ansible自動化運維① - 入門知識Linux運維
- 簡化IT運維工作,就要學會使用自動化運維工具!運維
- ansible自動化運維入門運維
- 自動化運維工具之Puppet模組運維
- 自動化運維的快速演進運維
- 自動化運維的發展方向運維
- 分層運維自動化監控運維
- 函式計算自動化運維實戰3 -- 事件觸發自動建立快照函式運維事件
- 自動化運維,國產化信創替代方案運維
- 函式計算自動化運維實戰2 -- 事件觸發eip自動轉移函式運維事件
- linux - 怎麼自動填寫有互動的shell指令碼 - SegmentFaultLinux指令碼
- 論IT運維自動化的重要性運維
- 自動化運維工具Ansible介紹運維
- Python自動化運維之IPy模組Python運維
- ansible自動化運維資料庫運維資料庫
- 有贊MySQL自動化運維之路—ZanDBMySql運維
- MySQL自動化運維之安裝篇MySql運維
- 自動化運維工具SaltStack詳細部署運維
- 運維自動化之賬單系統運維
- 指標是構築自動化運維與智慧化運維的基石指標運維
- 阿里雲釋出ECS自動化運維套件,幫助企業實現自動化運維轉型阿里運維套件
- linux shell 互動, read 命令Linux
- 運維自動化之使用PHP+MYSQL+SHELL打造私有監控系統(七)運維PHPMySql
- 半自動化運維之伺服器資訊維護運維伺服器
- LINUX 自動備份程式日誌(shell)Linux
- 【運維自動化】37秒萬臺伺服器標準化與交付自動化運維伺服器