首页
/
每日頭條
/
生活
/
Linux交互執行命令--expect詳解
Linux交互執行命令--expect詳解
更新时间:2026-08-01 12:11:19
概述

使用Linux的朋友對輸入密碼都不會陌生,比如使用超級用戶執行命令,又比如scp、ssh連接遠程主機等等。如果我們腳本裡面有scp的操作,總不可能執行一次scp就輸入密碼一次,這樣就需要一個人盯着腳本運行了。 為了解決這個問題,我們需要一個自動輸入密碼的功能。

expect是建立在tcl基礎上的一個工具,它可以讓一些需要交互的任務自動化地完成。相當于模拟了用戶和命令行的交互操作。

一個具體的場景:遠程登陸服務器,并執行命令。


expect是什麼?

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

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


expect基礎

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

命令作用:send用于向進程發送字符串,expect從進程接收字符串,spawn啟動新的進程,interact允許用戶交互。

Linux交互執行命令--expect詳解(Linux交互執行命令--expect詳解)1

說明:

  • send命令接收一個字符串參數,并将該參數發送到進程。
  • expect命令和send命令相反,expect通常用來等待一個進程的反饋,我們根據進程的反饋,再發送對應的交互命令。
  • spawn命令用來啟動新的進程,spawn後的send和expect命令都是和使用spawn打開進程進行交互。
  • interact命令用的其實不是很多,一般情況下使用spawn、send和expect命令就可以很好的完成我們的任務;但在一些特殊場合下還是需要使用interact命令的,interact命令主要用于退出自動化,進入人工交互。比如我們使用spawn、send和expect命令完成了ftp登陸主機,執行下載文件任務,但是我們希望在文件下載結束以後,仍然可以停留在ftp命令行狀态,以便手動的執行後續命令,此時使用interact命令就可以很好的完成這個任務。

結束符

expect eof :等待執行結束,若沒有這一句,可能導緻命令還沒執行,腳本就結束了

interact : 執行完成後保持交互狀态, 這時可以手動輸入信息

注:expect eof 與 interact 二選一即可


實例

下面通過一些常用的expect腳本來具體的說明如何使用expect來完成日常的一些工作。

Linux交互執行命令--expect詳解(Linux交互執行命令--expect詳解)2

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

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

set timeout 30:設置超時時間,單位為秒,默認情況下是10秒;

set host "xx.xx.xx.xx":設置變量;

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字符串,就輸入密碼。你可能也會看到這樣的代碼:

Linux交互執行命令--expect詳解(Linux交互執行命令--expect詳解)3

其中exp_continue表示循環式匹配,通常匹配之後都會退出語句,但如果有exp_continue則可以不斷循環匹配,輸入多條命令,簡化寫法。


六、傳參

很多時候,我們需要傳遞參數到腳本中,下面看看如何在expect中使用參數:

Linux交互執行命令--expect詳解(Linux交互執行命令--expect詳解)4

在expect中,\$argc表示參數個數,而參數值存放在$argv中,比如取第一個參數就是[hwb $argv 0],以此類推。


總結

能夠在工作中熟練的使用Shell腳本可以很大程度的提高工作效率,如果再搭配上expect,那麼很多工作都可以自動化進行。不過如果你會Python的話,你的視野将會更加開闊,那個時候你又會“嫌棄”expect了。

後面會分享更多devops和DBA方面的内容,感興趣的朋友可以關注下~

Linux交互執行命令--expect詳解(Linux交互執行命令--expect詳解)5

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
兒童防走失定位器有輻射嗎 兒童防走失定位器效果好嗎
兒童防走失定位器有輻射嗎 兒童防走失定位器效果好嗎
兒童防走失定位器是最近比較流行的一種電子産品,它比較小巧方便,使用起來很簡單,并且有一定追蹤作用,深受人們喜歡。兒童防走失定位器和手機等電子産品一樣,也是有一定輻射的,但是可以忽略不計,對人體沒有什麼影響。兒童防走失定位器有輻射嗎有一定輻射,但是可以忽略不計。兒童防丢失定位器是一款非常非常小的産品。...
2026-08-01
vivo賬号密碼忘記了怎麼辦
vivo賬号密碼忘記了怎麼辦
1、如果我們的賬号綁定的手機号、郵箱還在用或者密保問題還記得的話,我們可以點擊“找回密碼”,進入到密...
2026-08-01
十大好用的思維導圖app 做思維導圖的手機app推薦
十大好用的思維導圖app 做思維導圖的手機app推薦
思維導圖是一種可以幫助人們理清發散性思維,通過結構化的土星進行表達的思維工具,通過一個中心點向外發散出成千上萬個關節點,最終呈現出一個放射性的立體結構,那最好用的思維導圖軟件是哪個呢,制作思維導圖app哪個好,本文就為大家盤點并簡單介紹十大最好思維導圖軟件,一起來簡單了解一下吧。1.XMIND這款利...
2026-08-01
2022高考前應該做好哪些準備 高考前厭學是不是病
2022高考前應該做好哪些準備 高考前厭學是不是病
2022高考前應該做好哪些準備?高考前厭學是不是病?高考是人生的一個轉折點,而考前一個月的狀态,在很大程度上會影響到你的高考成績。在最後一個月,高中的知識以及涉及到的考試類型,基本上已經全部講完,最後一個月,其實是一個知識整合和貫通的階段,查缺補漏,培優補差是很重要的。下面,就快和小編一起了解相關知...
2026-08-01
抖音沒有粉絲能開通星圖嗎 抖音多少粉絲可以接星圖任務
抖音沒有粉絲能開通星圖嗎 抖音多少粉絲可以接星圖任務
抖音沒有粉絲能開通星圖嗎是大家常聊的。畢竟抖音變現可以說是時下最快實現财富自由的途徑之一,而且為了引流固粉更是不停的上線活動,因而大波的人群開始參與進來,下面小編就和大家一起看看抖音沒有粉絲怎麼開通星圖。抖音沒有粉絲能開通星圖嗎抖音沒有粉絲不能開通星圖。星圖任務是抖音上比較火熱的一個,不過由于要求很...
2026-08-01
Copyright 2023-2026 - www.tftnews.com All Rights Reserved