簡單的Shell指令碼實戰演練,測試菜鳥也可以輕鬆學會

博為峰網校發表於2022-05-11

之前投稿的《小白也能學會的Shell指令碼》大家都有看過麼?看過的小夥伴,有沒有自己嘗試用到工作中呢? 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~

前一段時間,我測試了一個檔案傳輸元件,它有什麼功能呢?

支援多檔案併發多執行緒傳送,在海量小檔案場景上能夠很好地利用網路頻寬進行檔案傳輸。支援TB級檔案傳輸,為提升單個檔案的傳送效率,支援透過指令碼將超大檔案切分為多個小檔案進行併發傳輸。

支援多種規則配置,透過規則引擎進行策略化處理,支援傳送規則、接收規則,表示式等機制,能夠靈活地滿足檔案傳輸中的多種傳輸場景。

上面兩條只是一部分描述,簡單說就是,同一個計算機叢集,每臺伺服器都安裝好我們的軟體,然後就可以透過Web服務,直接在網頁上設計任意兩臺計算機直接的檔案傳輸,並且可以進行規則的配置。

為了更形象一點,把我們的產品截個圖,左邊是傳送節點,點開可以進行配置,右邊是接收節點,同樣點開可以進行配置。

這裡主要解釋一下,接收端規則:傳送端把目錄下所有檔案發往接收端,接收端只接收字首是deno的檔案(即deno開頭即可)。

為了測試不同的規則配置,我需要很多大小不同、檔名不同(字首不同)的檔案。

自從從上次學會了寫簡單的Shell指令碼後,很久沒有用武之地了,這次又能實戰演練了。

設計思路

1、我需要知道Linux系統下,有什麼命令可以生成檔案,還能指定檔名、檔案大小之類的。

2、我需要3個引數,檔案大小、檔案個數、檔案字首。

3、檔案個數,依然使用我們熟悉的for迴圈實現。

有了思路之後,就是實現了,生成檔案的命令,由於之前沒有接觸過,直接 搜尋。後面的思路,都是上次初學Shell指令碼GET的知識點。經過一番除錯和自我測試,有了下面的指令碼。

#! /bin/bash

#第一個引數$1:檔案大小

#第二個引數$2:檔案個數

#第三個引數$3:檔案字首

for((i=1;i<=$2;i++));

do

truncate -s $1M $3$i.file

echo "檔案 $3$i.file 建立完畢"

done

解釋一下 truncate,它的一般用法:truncate -s 1M demo.txt,意思是建立一個 1M 大小的檔案,檔名是 demo.txt。

開始完成了這就指令碼後,感覺好用極了,可是後來過了一段時間,再想去用它,我竟忘了輸入的引數和位置,只能開啟指令碼看一看。可是我想到了我們開發寫的指令碼和網路上開源的指令碼,人家是有幫助資訊的,不知道怎麼用的時候,一般在後面加上-h 或者--help。就比如我用來建立檔案的這個工具 truncate。下圖可以看到,我第一次輸入了truncate 命令沒有接任何引數,但是人家給出了幫助提示。第二次我使用了--help,人家就給出了更詳細的用法。

我也想給我的指令碼加上這樣的功能,這樣才能和別人分享我的指令碼。

模仿是人類的本能之一,於是我找到了伺服器上我們開發人員寫的 shell 指令碼學習了一下,再然後參考了一些網路資源(百度)。

學習的過程暫且不表,我先總結一下我學到的兩種方法:1、將幫助資訊寫在指令碼頭部;2、Shell 中寫一個方法,把幫助資訊寫到方法中。

兩個方法的區別就是幫助資訊位置不一樣,但是都是透過判斷輸入引數來輸出。第一個方法稍微複雜一下,因為要用正則提取寫到頭部的幫助資訊,不然程式不知道要輸出什麼。資訊寫到方法中的情況:

簡單解釋下這個指令碼內容,先定義了一個方法 usage,後面做了一個比較,如果為真,就執行後面括號中的內容即,usage 方法。

$#:使用指令碼時,傳入的引數個數。

-lt:檢測左邊的數是否小於右邊的,如果是,則返回 true,然後執行後面的 usage 方法,列印幫助資訊。

資訊放在頭部的情況:

看到下面那個箭頭沒有,用到了 awk 命令,這個命令可是有名,與 sed 和 grep 並稱linux 三劍客。後面還跟了挺長的好幾個引數,不懂的人看了真是懵。

簡單說一下 awk 那行程式碼的大概意思,對於該指令碼的每一行,以“###空格”為分隔符進行分隔,然後正則匹配“###”開頭的每一行並列印分隔後的第 2 列。

其中的引數解釋:

-F 後面接的第一個引數是分隔符也就是###加空格。

$2:這個引數我直接修改指令碼為$1,測試了一下,發現輸出了下面的內容。

修改指令碼之前,執行輸出內容如下圖,簡單對比一下,應該能猜到,分隔符把每行分割成了 2 部分,1 代表前面一部分,2 代表後面一部分。

'/^###/ { print $2 }' :這一段的意思分兩部分解釋,/^###/,是正規表示式,意思匹配以###開頭的每一行,後面的部分{ print $2 },前面的正則匹配到了就會執行的動作,也就是列印了分隔符的第二段。

$0 : 這引數就是 shell 指令碼引數通用的,代表指令碼檔案本身。

最後:

可以我的個人V:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的影片學習教程免費分享!,其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試高階持續整合、測試架構開發測試框架、效能測試等。

這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2893577/,如需轉載,請註明出處,否則將追究法律責任。

相關文章