for((i=0;i<1;i++));do
{
command1
command2
}&
done
for((i=0;i<1;i++));do
{
command3&
command4&
}&
done
for((i=0;i<1;i++));do
{
command5 &
command6 &
if 5 6执行完毕...
command7
}&
done
这样类似这样的改造,让有前后关系的命令放在一个for循环里让他们一起执行去,这样三个for循环其实是并行执行了。然后for循环内部的命令你还可以类似改造1的那种方式改造或者内嵌改造2这个的并行for循环,都是可以的,关键看你想象力了。恩?哦,不对,关键是看这些个命令之间是一种什么样的基友关系了。有关联的放一个屋里就行了,剩下的你就不用操心了。嘿嘿~~
其实这个优化真的需要看系统负载。
5、关于对shell命令的理解。这个条目就靠经验了,因为貌似没有相关的书籍可看,如果谁知道有,请推荐给我,我会灰常感谢的啊。
比如:sed -n '45,50p' 和 sed -n '51q;45,50p' ,前者也是读取45到50行,后者也是,但是后者到51行就执行了退出sed命令,避免了后续的操作读取。如果这个目标文件的规模巨大的话,剩下的你懂的。
还有类似sed ‘s/foo/bar/g' 和sed ‘/foo/ s/foo/bar/g'
sed支持采用正则进行匹配和替换,考虑字符串替换的需求中,不防加上地址以提高速度。实例中通过增加一个判断逻辑,采用“事先匹配”代替“直接替换”,由于sed会保留前一次的正则匹配环境,不会产生冗余的正则匹配,因此后者具有更高的效率。关于sed命令的这两点优化,我也在sed命令详解里有提到。
还有类似sort 如果数字尽量用 -n选项;还有统计文件行数,如果每行的数据在占用字节数一样的情况时就可以ls查文件大小然后除以每行的数据大小的出行数,而避免直接使用wc -l这样的命令;还有find出来的数据,别直接就-exec选项了,如果数据规模小很好,但是如果你find出来上千条数据或更多,你会疯掉的,不,系统会疯掉的,因为每行数据都会产生新的进程,你可以这样find …. | xargs ….;还有…(如果你也知道类似的提效率情况请你告诉我共同进步!)
三、关于优化更好的一些选择
一个比较好的提升Shell脚本的效率方法就是…… 就是…… 就是…… 好吧,就是尽量少用Shell(别打我啊!!!)下边给出一些debian官方统计的一些在linux系统上边的各个语言的效率图,咱都以C++为比较基准(系统规格:x64 Ubuntu™ Intel® Q6600® quad-core):
这些图的查看方法,比如第一个图java和c++的程序效率比较图,总共分三个部分,分别是time、memory、code的比较,如果是c++/java ,就是说 c++做比较的分子,java做比较的分母,如果图上的长条在哪边,说明所在的那边的程序使用的时间或者内存或者代码较多,具体多多少就看长条长了多少。每一部分有多个长条图形,每个长条图案表示针对程序处理不同方面的任务时进行的测试。比如第一幅,c++和java在该环境下大部分情况下time上是差不多的,甚至java-server还有稍微的优势,内存方面c++就有很大优势,能够使用比java少的多的内容做相同的事情,但是编码量c++就稍微多一点点。以下的图类似。










