搜尋
首頁運維linux運維Linux expect詳解

Linux expect詳解

Aug 09, 2019 pm 02:22 PM
linux

Linux expect詳解

隨處可見的expect

#第一次見expect這個指令還是我第一次參加全量上線的時候,那是公司的一個牛人用Shell腳本寫的一套自動部署、MD5 比對、發布的全量上線工具,沒事的時候,看了下其中的幾個腳本,好多的expect指令。實在看不懂這個expect指令的用法,所以就找時間總結了這篇關於expect指令的文章。

推薦:【Linux影片教學

先拋出一個問題

現在有兩台Linux主機A和B,如何從A主機ssh到B主機,然後在B主機上執行指令,如何讓這個過程全程自動化?你可能會使用這種方法:

ssh admin@10.220.20.15 "ls"

但是這種方式比較笨拙,每次都要輸入密碼,同時並不能執行一些複雜的邏輯或指令。那麼如何實現全程自動化呢?這就要用到今天這篇文章總結的expect了。

expect是什麼?

expect是一個免費的程式設計工具,用來實現自動的互動式任務,而無需人為幹預。說穿了,expect就是一套用來實現自動互動功能的軟體。

在實際工作中,當我們執行命令、腳本或程式時,這些命令、腳本或程式都需要從終端機輸入某些繼續運行的指令,而這些輸入都需要人為的手動進行。而利用expect,則可以根據程序的提示,模擬標準輸入提供給程序,從而實現自動化交互執行。這就是expect! ! !

expect基礎

在使用expect時,基本上都是和以下四個指令打交道:

Linux expect詳解

#send指令接收一個字串參數,並將該參數傳送到進程。

expect指令和send指令相反,expect通常用來等待一個行程的回饋,我們根據行程的回饋,再傳送對應的互動指令。

spawn指令用來啟動新的進程,spawn後的send和expect指令都是和使用spawn開啟的進程進行互動。

interact指令用的其實不是很多,一般情況下使用spawn、send和expect指令就可以很好的完成我們的任務;但在一些特殊場合還是需要使用interact指令的,interact指令主要用於退出自動化,進入人工互動。例如我們使用spawn、send和expect指令完成了ftp登陸主機,執行下載檔案任務,但我們希望在檔案下載結束以後,仍然可以停留在ftp指令列狀態,以便手動的執行後續指令,此時使用interact指令就可以很好的完成這個任務。

實用程式碼分析

上面對expect進行了總結,特別是對一些常用的指令進行了詳細的說明。以下就透過一些常用的expect腳本來具體的說明如何使用expect來完成日常的一些工作。

#!/usr/tcl/bin/expect
set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact

這是一段非常簡單的expect範例程式碼,示範了expect的基本使用方法。

#!/usr/tcl/bin/expect:使用expect來解釋該腳本;

set timeout 30:設定超時時間,單位為秒,預設為10秒;

set host "101.200.241.109":設定變數;

spawn ssh $username@$host:spawn是進入expect環境後才可以執行的expect內部指令,如果沒有裝expect或直接在預設的SHELL下執行是找不到spawn指令的。它主要的功能是為ssh運行進程加個殼,用來傳遞互動指令;

expect "*password*":這裡的expect也是expect的內部指令,這個指令的意思是判斷上次輸出結果裡是否包含「password」的字串,如果有則立即返回;否則就等待一段時間後返回,這裡等待時長就是前面設定的30秒;

send "$password\r":當配對到對應的輸出結果時,就發送密碼到開啟的ssh進程,執行互動動作;

interact:執行完成後保持互動狀態,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登入完成後會退出,而不是留在遠端終端上。

這就是對上述這段簡單簡單腳本的分析,在上述的範例中,涉及expect中一個非常重要的概念-模式-動作;即上述expect "*password*" {send " $password\r"}這句程式碼表達出來的意思。

模式-動作

結合expect "*password*" {send "$password\r"}這句程式碼來說說「模式-動作」。簡單的說就是要配對到一個模式,就執行對應的動作;要配對到password字串,就輸入密碼。你可能也會看到這樣的程式碼:

expect {
    "password" {
        send "$password\r"
        exp_continue
    }
    eof
    {
        send "eof"
    }
}

其中exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。

传参

很多时候,我们需要传递参数到脚本中,现在通过下面这段代码来看看如何在expect中使用参数:

#!/usr/tcl/bin/expect
if {$argc < 3} {
    puts "Usage:cmd <host> <username> <password>"
    exit 1
}
set timeout -1
set host [lindex $argv 0] 
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact

在expect中,\$argc表示参数个数,而参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0],以此类推。

总结

能够在工作中熟练的使用Shell脚本就可以很大程度的提高工作效率,如果再搭配上expect,那么很多工作都可以自动化进行,对工作的展开如虎添翼。如果你会Python的话,你的视野将会更加开阔,那个时候你又会“嫌弃”expect了。

以上是Linux expect詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:jellythink。如有侵權,請聯絡admin@php.cn刪除
Linux操作:管理文件,目錄和權限Linux操作:管理文件,目錄和權限Apr 23, 2025 am 12:19 AM

在Linux中,文件和目錄管理使用ls、cd、mkdir、rm、cp、mv命令,權限管理使用chmod、chown、chgrp命令。 1.文件和目錄管理命令如ls-l列出詳細信息,mkdir-p遞歸創建目錄。 2.權限管理命令如chmod755file設置文件權限,chownuserfile改變文件所有者,chgrpgroupfile改變文件所屬組。這些命令基於文件系統結構和用戶、組系統,通過系統調用和元數據實現操作和控制。

Linux中的維護模式是什麼?解釋了Linux中的維護模式是什麼?解釋了Apr 22, 2025 am 12:06 AM

MaintenancemodeInuxisAspecialBootenvironmentforforcalsystemmaintenancetasks.itallowsadMinistratorStoperFormTaskSlikerSettingPassingPassingPasswords,RepairingFilesystems,andRecoveringFrombootFailuresFailuresFailuresInamInimAlenimalenimalenrenmentrent.ToEnterMainterMainterMaintErmaintErmaintEncemememodeBoode,Interlecttheboo

Linux:深入研究其基本部分Linux:深入研究其基本部分Apr 21, 2025 am 12:03 AM

Linux的核心組件包括內核、文件系統、Shell、用戶空間與內核空間、設備驅動程序以及性能優化和最佳實踐。 1)內核是系統的核心,管理硬件、內存和進程。 2)文件系統組織數據,支持多種類型如ext4、Btrfs和XFS。 3)Shell是用戶與系統交互的命令中心,支持腳本編寫。 4)用戶空間與內核空間分離,確保系統穩定性。 5)設備驅動程序連接硬件與操作系統。 6)性能優化包括調整系統配置和遵循最佳實踐。

Linux體系結構:揭示5個基本組件Linux體系結構:揭示5個基本組件Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

Linux操作:利用維護模式Linux操作:利用維護模式Apr 19, 2025 am 12:08 AM

Linux的維護模式可以通過GRUB菜單進入,具體步驟為:1)在GRUB菜單中選擇內核並按'e'編輯,2)在'linux'行末添加'single'或'1',3)按Ctrl X啟動。維護模式提供了一個安全環境,適用於系統修復、重置密碼和系統升級等任務。

Linux:如何進入恢復模式(和維護)Linux:如何進入恢復模式(和維護)Apr 18, 2025 am 12:05 AM

進入Linux恢復模式的步驟是:1.重啟系統並按特定鍵進入GRUB菜單;2.選擇帶有(recoverymode)的選項;3.在恢復模式菜單中選擇操作,如fsck或root。恢復模式允許你以單用戶模式啟動系統,進行文件系統檢查和修復、編輯配置文件等操作,幫助解決系統問題。

Linux的基本要素:為初學者解釋Linux的基本要素:為初學者解釋Apr 17, 2025 am 12:08 AM

Linux的核心組件包括內核、文件系統、Shell和常用工具。 1.內核管理硬件資源並提供基本服務。 2.文件系統組織和存儲數據。 3.Shell是用戶與系統交互的接口。 4.常用工具幫助完成日常任務。

Linux:看看其基本結構Linux:看看其基本結構Apr 16, 2025 am 12:01 AM

Linux的基本結構包括內核、文件系統和Shell。 1)內核管理硬件資源,使用uname-r查看版本。 2)EXT4文件系統支持大文件和日誌,使用mkfs.ext4創建。 3)Shell如Bash提供命令行交互,使用ls-l列出文件。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。