相信对于经常编写shell脚本的人来说,利用for语句对一批任务进行批量、串行处理是小菜一碟,不过有时候我们希望能够对一批任务进行批量、并行地运行任务,从而最大程度发挥多核CPU的优势,这时候如何优雅地、不借助额外工具来达成这一并行效果呢?其实可以巧妙地借用makefile文件,用make命令来实现并行、批量执行的操作。在此感谢邹神(jxzou)提供的批量并行的解决思路。 脚本获取方式: spanclasscodesnippetouter链接:https:spanclasscodesnippetcommentpan。baidu。coms1M7BEKcygKye4JmcutUZ5ZQspanspanspanclasscodesnippetouter提取码:dp28span 这里举个使用该脚本的范例: 在文件夹中有多个。a文件,想利用bash批量、并行运行。a文件。。a文件内容如下: spanclasscodesnippetouterspanclasscodesnippetbuiltinechospanspanclasscodesnippetstringhellospanspanspanclasscodesnippetoutersleep5span 那么,我们可以先收集多个。a文件所在位置信息,生成makefile文件,最后利用诸如spanclasscodesnippetouterspanclasscodesnippetbuiltinmakespanfparallelrun。spanclasscodesnippetbuiltinmakespanj8span 命令,来借用makefile容器进行并行处理。 parallelrun。make内容如下: spanclasscodesnippetouterspanclasscodesnippetattributeallspan:w1w2w3w4w5w6w7w8w9spanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw1span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun11。amnteparallelrun11。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw2span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun144。amnteparallelrun144。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw3span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun22。amnteparallelrun22。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw4span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun255。amnteparallelrun255。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw5span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun33。amnteparallelrun33。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw6span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun355。amnteparallelrun355。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw7span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun3544。amnteparallelrun3544。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw8span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun44。amnteparallelrun44。log21spanspanspanclasscodesnippetouter spanspanclasscodesnippetouterspanclasscodesnippetattrw9span:spanclasscodesnippetstringspanspanspanclasscodesnippetouterspanclasscodesnippetattrbashspanspanclasscodesnippetstringmnteparallelrun55。amnteparallelrun55。log21spanspan 在脚本里可以修改下面参数来适应不同的脚本任务:spanclasscodesnippetouterfileextensionspanclasscodesnippetstringaspanspanclasscodesnippetcommentthe。fileextensionfiletobeexecutedspanspanspanclasscodesnippetouternumcpu6spanclasscodesnippetcommentnumberofCPUcorestobeusedspanspanspanclasscodesnippetoutercommandbashspanclasscodesnippetcommentinputcommandherespanspan 下面是脚本运行过程中的输出信息: