隨處可見的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時,基本上都是和以下四個指令打交道:
#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中文網其他相關文章!

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

MaintenancemodeInuxisAspecialBootenvironmentforforcalsystemmaintenancetasks.itallowsadMinistratorStoperFormTaskSlikerSettingPassingPassingPasswords,RepairingFilesystems,andRecoveringFrombootFailuresFailuresFailuresInamInimAlenimalenimalenrenmentrent.ToEnterMainterMainterMaintErmaintErmaintEncemememodeBoode,Interlecttheboo

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

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