百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

测试工程师到底要不要熟练使用 shell?

bigegpt 2024-12-22 14:25 4 浏览

作者:Will,软件质量保障专家,DevOps 落地专家,公众号撩保星球。曾担任某大型全球分布式存储产品测试负责人,以及某容器云平台解决方案公司的 DevOps 产品测试架构师。现就职一家零售业大数据智能解决方案公司,担任产品质量负责人。


掌握这篇 shell 技巧,就能应付 80% 的测试场景需求了


引言

都 21 世纪 20 年代了,为什么还是少不了远古时期的 shell script ?Python 那么火,难道不香吗?

对于我这样一个左手 Shell 右手 Python 的人来说,只能说这个真的跟工作任务的场景有关。

特别是软件测试工程师,不同于软件开发工程师,不需要像开发工程师那样对一门编程语言的极致精通,测试工程师的职责是保障产品质量,工具(包括编程语言)的使用是为了更便捷更高效的辅助工作,所以当工作场景需要在 Unix/Linux 平台上进行各种操作的时候,Shell 作为直接跟系统内核打交道的命令语言有着天然的优势和便利,硬要用 Python 不是为难自己么?

事实上,我写下这篇的原因和动力,正是我那些测试工程师同事们的需求。


从哪里开始

Shell 命令其实非常多,不过如果我们不是系统运维,而是作为一个 Linux 环境上的测试工程师而言,掌握 20 个左右就足够了。

其中有大部分是基础中的基础,只要用 Linux 就会用到,所谓的高级一点的用法无非是编程,或者是命令与命令之间用管道符连接组成复杂的长命令。


基础命令

这些命令多是对磁盘/目录/文件的操作,单独使用非常简单。

还有一些命令是查看系统资源,也是会经常使用到的。


混搭

除了以上基础命令,还有一些很常用的命令,比如 echo 用来输出字符串,sed 和 awk 都是用来处理文件内容的,在多命令混搭或写脚本的时候非常有用。

这些命令单独看的时候,其实没有什么难度,主要是在想获取某种效果的时候需要混搭,需要靠 | 或> 或 >>连接,比如:

对于相对复杂的查询获取,只要你愿意,可以继续用管道符 | 一直传递下去,从而达到预期目标。

这其中相对较难的是 sed 和 awk,如果对上面的例子还是没有概念的话,继续看以下两段:

sed 用得最多的替换输出或者文件中的字符串,比如要上面的例子,要替换 /etc/hosts 中我们添加的 QualitySphere.github.io 这行的指定内容:

grep QualitySphere /etc/hosts | sed 's/github/gitee/g'

这在输出的时候就把 github 字段换成了 gitee,格式为 's/string_a/string_b/g',s是告诉 sed 我们要进行替换操作,g 是替换所有的 string_a,如果没有 g 就只替换搜索到的第一个。

有时候我们的需求是直接修改一个文件中的目标字符串,使用 sed 的时候加上 -i 参数,比如 sed -i 's/github/gitee/g' /etc/hosts 执行之后,该文件内容直接被修改了,不过值得注意的是,如果是在 Mac 上执行该命令,通常 Mac 默认的 shell 是 zsh,与 Linux 默认的 bash 不太一样,-i 后面要带个值,空值就好,sed -i '' 's/QualitySphere/qsphere/g' /etc/hosts

要想删除该行其实是有 d参数的,不过为了减少记忆,依旧可以简单粗暴的用替换的方法,因为sed支持正则表达式,因此使用 sed -i 's/.*qsphere.*//g' /etc/hosts 也能达到效果。

awk则是更是超级强大,甚至有很多 AWK 编程实战的技术贴,没错,这货是个程序设计语言,我有幸体验过它性能的强大。

不过通常我们比较常用的是通过它来获取指定目标位置的字符串, 比如我们去获取内存的值,free -h | grep Mem | awk '{print $2}'

首先会 grep 出内存那一行,如果以空格为分隔符,我们会看到内存的值是在第 2 列,因此用 '{print $2}' 来获取第 2 列的值。

有时候分隔符只用空格是肯定不行的,比如我要获取一个 IP 的最后一个数值,可以指定.为分隔符,echo "192.168.1.199" | awk -F '.' '{print $4}' 参数 -F 指定分割符,然后获取第 4 个值。


脚本

很多时候光有命令还是不够的,总要写一些脚本,把重复的事情交给机器。

通常,循环和逻辑判断就已经够用了,高阶用法无非是高效且优美。

举些例子,注意其中的符号及空格的细节。

判断两个字符串

A=will
B=bxwill
if [[ "$A" == "$B" ]]; then    # 字符串用 "..." 括起来,用 [[ ... ]] 来判断
    echo PASS
else
    echo FAIL
fi

判断两个数字

A=1
B=2
if (( $A == $B )); then     # 数字不需要 "...",用 (( ... )) 来判断
    echo PASS
else
    echo FAIL
fi

还有一些逻辑判断很常用

if [[ -f /etc/hosts ]]; then    # 判断文件是否存在
    echo PASS
else
    echo FAIL
fi

if [[ -d /etc ]]; then    # 判断目录是否存在
    echo PASS
else
    echo FAIL
fi

A=will
if [[ -z "$A" ]]; then    # 判断字符串是否为空
    echo PASS
else
    echo FAIL
fi

if [[ -n "$A" ]]; then    # 判断字符串是否不为空
    echo PASS
else
    echo FAIL
fi

for 循环

for i in `seq 1 10`    # seq 1 10 直接生成 1-10 的数字,用键盘左上角的 ` 符号括起来,会先执行该命令
do
    echo $i
done

while 循环

while true    # 看,这是一个死循环
do
    sleep 1    # 停顿 1 秒,在脚本中也是很常用的命令
    echo PASS
done


其他技巧

最实用的莫过于后台执行了,比如你写了一个脚本叫 check_me.sh,想丢在后台执行,nohup ./check_me.sh & 它就会使该脚本在后台执行,并且日志会存在当前目录的 nohup.out 中。

当然,丢后台执行那是写好了脚本,最伤心的事情莫过于,你正在调试,敲了一堆命令,坐等运行结果的时候,突然断网,呜呼哀哉,一夜回到解放前,Linux 自带 screen 工具,连接到终端准备大展拳脚之前,顺手输入 screen 开启一个视窗,若在一阵敲打过程中突然掉线,莫方,再次登录终端,尝试 screen -ls 一下,你会看到之前开启的视窗在列表中,开头的那窜数字就是它的 ID,screen -r $ID 就又回到之前的视窗,所有的操作又回到了你的眼前。

同样的效果有个更不错的工具 tmux,则需要自行安装,它比 screen 更友好一些,可自行了解。

文中未涉及到的用法和命令,感兴趣的可以去搜索一番,或者直接在命令行用 man 命令来学习。

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...