成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux交互執行命令:expect詳解

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

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

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

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

expect是什么?

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

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

expect基礎

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

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

Linux交互執行命令--expect詳解

說明:

  • 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詳解

這是一段非常簡單的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詳解

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

傳參

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

Linux交互執行命令--expect詳解

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

總結

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

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2020-09-21 05:53:28

Linux命令&

2009-12-29 14:36:29

Ubuntu cron

2022-11-18 08:55:33

2018-01-18 10:57:48

Linux服務器命令

2017-12-11 09:34:40

Linux啟動或重啟命令與腳本

2022-09-27 10:07:01

要使用 source

2017-03-10 10:37:16

Linux命令腳本

2019-08-28 09:04:02

Go語言Python操作系統

2012-06-01 09:44:26

Python

2014-07-31 18:23:41

Process

2019-04-25 09:52:38

SSHLinux服務器

2022-02-04 22:05:19

JVM程序內存模型

2022-09-01 12:17:43

SCSI協議Linux

2014-07-24 11:37:54

LinuxTop命令

2020-07-20 07:45:00

Linux

2017-03-10 15:25:35

Linuxnetstat命令

2021-04-14 16:06:42

Linuxchattr命令

2020-08-13 07:38:41

Linux screen命令

2012-05-10 08:46:05

Linuxsort命令

2012-05-10 08:37:54

Linuxxargs
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区成人 | 黄色片在线 | 国产精品一区二区福利视频 | 国产在线视频一区 | 久久不卡 | 天天插日日操 | 波波电影院一区二区三区 | 亚洲成人a v| 国产精品毛片无码 | 亚洲国产一区二区在线 | 国产激情免费视频 | 亚州视频在线 | 狠狠操狠狠操 | 不卡av电影在线播放 | 日韩免 | 一级在线毛片 | 污片在线观看 | 亚洲免费精品 | 久久精品欧美一区二区三区不卡 | 亚洲精品一区二区三区蜜桃久 | 日韩中文一区二区三区 | 日本三级黄视频 | 激情视频一区 | 日韩精品在线免费 | 日韩a v在线免费观看 | 日本在线视 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 三区四区在线观看 | 免费午夜视频在线观看 | 午夜精品久久久久久不卡欧美一级 | 久色网 | 国外激情av | 国产精品欧美一区喷水 | 免费黄色片视频 | 视频一区二区中文字幕日韩 | 欧美一区二区免费 | 中文字幕在线观看第一页 | 午夜国产精品视频 | 特一级毛片 | 日韩中文字幕视频在线 | 国产精品久久久久久久 |