当前位置: 首页 > 科技观察

如何一次性执行目录下的所有脚本

时间:2023-03-15 22:56:22 科技观察

我们平时工作的时候,为了测试产品的一些功能,我们会写一系列的脚本,放在同一个目录下。在做测试的时候,我们通常会依次执行这些脚本,然后记录测试结果。这样做的缺点很明显,就是效率太低。如果剧本不多,你的“时间管理”能力强,那问题不大。但是如果脚本很多,那你可能会有一拳把屏幕炸碎的冲动(别问我怎么知道的,要不是同事拼命拉,我的屏幕可能已经炸好几块了).本文将介绍三种一次性执行一个目录下所有脚本的方式。1.run-parts首先推荐一个非常好用,但大家不是很熟悉的命令:run-parts。它的基本用法如下:$run-partsoption但是并不是目录下的所有脚本都会被执行,仍然会有一些命名要求。脚本名称只有满足以下条件才会执行:大写/小写、数字、下划线(_)、破折号(-)。为了选择符合条件的脚本,我们通常需要加上--regex选项。如果我们的目录下有这些脚本:由于脚本一般以.sh结尾,如果你的命名符合规则,如果你想执行所有的脚本,可以这样做:$run-parts--regex'sh$'.执行结果:如果只想执行以s开头sh结尾的脚本,可以组合如下正则表达式:$run-parts--regex'^s.*sh$'。执行结果:当然,你可以根据自己的脚本情况,编写相应的正则表达式。为了防止误操作,在脚本真正执行之前,可以先看看会执行什么脚本。我们可以添加--list选项:$run-parts--list--regex'^s.*sh$'。执行结果:如结果所示,加上--list选项后,只会列出Executedscripts方便大家查看,并不会真正执行这些脚本。2.find不过run-parts这个命令还是比较少的,估计很多人都不知道这个命令,更不用说知道怎么用了。还有一种执行一个目录下所有脚本的方法就是使用find命令,大家比较熟悉。具体来说,我们可以使用find命令查找目标目录下的所有脚本,然后使用-exec选项执行找到的脚本。$find~/scripts-maxdepth1-typef-executable-name's*'-exec{}\;STAYHOMESTAYSAFE上面的命令指定只查找scripts/目录下的脚本,不过也可以去掉这个限制,可以搜索当前目录及其子目录下的所有脚本:$find-maxdepth1-typef-executable-name'*.sh'-exec{}\;3.for如果你的Shell水平不错,那么for循环也是不错的选择。比如要执行目录下所有s开头的脚本,可以这样写:$forfin~/scripts/s*;do[-x"$f"]&&[!-d"$f"]&&"$f";doneSTAYHOMESTAYSAFE如果要执行目录下的所有脚本,可以做一个小改动:$forfin~/scripts/*.sh;do[-x"$f"]&&[!-d"$f"]&&"$f";done公众号:对Linuxhelloworld的美好承诺!STAYHOMESTAYSAFE当然,如果你想执行其他脚本或者有其他需求,可以发挥你的想象力,编写相应的命令。本文经授权转载自公众号“良墟Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!