简单的Shell脚本实战演练,测试菜鸟也可以轻松学会

上一篇 / 下一篇  2022-05-11 17:52:20 / 个人分类:自动化测试

之前投稿的《小白也能学会的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 脚本参数通用的,代表脚本文件本身。


添加微信:atstudy-js  或者扫描下方二维码,备注“博客”邀请你进入Python自动化测试学习交流群~


TAG:

 

评分:0

我来说两句

Open Toolbar