之前投稿的《小白也能學會的Shell腳本》大家都有看過麼?看過的小夥伴,有沒有自己嘗試用到工作中呢?
前一段時間,我測試了一個文件傳輸組件,它有什麼功能呢?
支持多文件并發多線程發送,在海量小文件場景上能夠很好地利用網絡帶寬進行文件傳輸。支持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 腳本參數通用的,代表腳本文件本身。
……
由于作者版權要求,僅展示文章的一部分,如需閱讀完整版文章,可以私信回複”文章“即可免費獲取。
最後:1)關注 私信回複:“測試”,可以免費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!,其中包括了有基礎知識、Linux必備、Mysql數據庫、抓包工具、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試等。
2)關注 私信回複:"入群" 就可以邀請你進入軟件測試群學習交流~~
,