Linux Shell互動式自動化運維程式

2021-09-20 13:30:15 字數 2958 閱讀 7337

expect

是linux作業系統下的乙個用來處理互動操作,系統預設是沒有安裝expect庫,所以執行expect會提示找不到命令,需要手動安裝,其它安裝也比較簡單,可以通過二進位制原始碼包編譯配置進行安裝,也可以通過網路借助yum源來安裝,yum源安裝比較簡單;我們下面借助expect庫來實現linux互動式自動化運維操作,只需要執行指令碼就可以實現自動化運維操作,不需要手動輸入一些資訊按確定,我們可以將互動過程寫在乙個指令碼上,使之自動化完成。我們可以通過expect實現ssh自動登入、ftp自動登入、自動傳輸檔案、自動建立和刪除使用者等都符合互動式自動化運維。下面我們會通過一些案例來展現結果,我們通過以下幾個命令來介紹四個基礎命令。

在企業中應用還是比較廣泛,而且expect是乙個免費的程式設計工具語言,用來實現自動和互動式任務進行通訊,而無需人的干預。expect是不斷的更新,隨著時間的流逝,其功能越來越強大,對linux有基本的了解都知道這個命令,而且是linux作業系統管理員必不可少的乙個命令,常用的shell指令碼都需要用到這個工具,可以省去運維大量的操作時間,有利於提高工作效率,如果對linux不太了解的可以去購物平台去搜劉遄老師的

《linux就該這麼學》

這本書學習,書籍內容比較適合初學者,也有好多案例比較適合企業常用的一些操作,expect需要tcl程式語言的支援,要在系統上執行expect必須首先安裝tcl。

下面詳細的解釋四個基礎命定,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"

3. spawn命令

上面的所有案例都是和標準輸入輸出進行互動,但是我們更希望他可以和某乙個程序進行互動。spawm命令就是用來啟動新的程序的。spawn後的send和expect命令都是和spawn開啟的程序進行互動的。結合上面的send和expect命令我們可以實現乙個更複雜點的shell程式。

# vim test.sh

set timeout -1                          //

設定永不超時;

spawn ssh -p 22 [email protected]       //

開啟新的程序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 [email protected]

expect "*password:"

send "password\r"

spawn sleep 10

interact

exit

這個案例其實和上面這個差不多,但是這個多了乙個自動退出功能,設定登入成功10s後自動退出。

expect

在shell中也是乙個比較複雜的庫,如果想深入的了解,自己也要多結合理論和實踐操作一起進行,這樣學習起來還是比較快的,還可以通過shell實現簡單的控制功能,如:迴圈、判斷等。但是對於需要互動的場合則必須通過人工來干預,有時候我們可能會需要實現和互動程式如ssh伺服器等進行互動的功能,而expect就使用來實現這種功能的工具,希望本文章會給大家有所幫助。

Linux Shell互動式自動化運維程式

expect 是linux作業系統下的乙個用來處理互動操作,系統預設是沒有安裝expect庫,所以執行expect會提示找不到命令,需要手動安裝,其它安裝也比較簡單,可以通過二進位制原始碼包編譯配置進行安裝,也可以通過網路借助yum源來安裝,yum源安裝比較簡單 我們下面借助expect庫來實現li...

Linux Shell互動式自動化運維程式

expect是linux作業系統下的乙個用來處理互動操作,系統預設是沒有安裝expect庫,所以執行expect會提示找不到命令,需要手動安裝,其它安裝也比較簡單,可以通過二進位制原始碼包編譯配置進行安裝,也可以通過網路借助yum源來安裝,yum源安裝比較簡單 我們下面借助expect庫來實現lin...

自動互動式指令碼 expect簡介

我們經常會遇到一些需要與伺服器程式打交道的場景,比如,從登陸某個伺服器,然後進行某項工作。這很平常,但是如果把這個工作自動化進行,你就需要乙個程式能自動做你要告訴機器的事情,這樣,我們的expect就能大顯身手了。首先,expect是乙個簡單的工具語言,如要工作就是進行自動化的人機互動。它的作者對e...