[b]一、先说一下Shell脚本语言自身的局限性[/b]
作为解释型的脚本语言,天生就有效率上边的缺陷。尽管它调用的其他命令可能效率上是不错的。
Shell脚本程序的执行是顺序执行,而非并行执行的。这很大程度上浪费了可能能利用上的系统资源。
Shell每执行一个命令就创建一个新的进程,如果脚本编写者没有这方面意识,编写脚本不当的话,是非常浪费系统资源的。
[b]二、我们在Shell脚本语言的局限性上尽可能的通过我们有经验的编码来提高脚本的效率。[/b]
1、比如我想做一个循环处理数据,可能是简单的处理一下数据,这样会让人比较容易就想到Shell里的循环类似这样:
[url=http://blog.csdn.net/sosodream/article/details/6276758]这篇文章[/url]的作者的博文指点。
2012-02-22 ps:循环检测后台命令是否结束的判断修改:
解决方法暂时有两个(具体没有解释,不太清楚原因):
1、
sleep 8 &
sleep 16 &
while true
do
echo `jobs -p | wc -l`
jobs -l >> res
sleep 4
done
2、 检查剩余个数的语句改成 jobs -l |grep -v “Done”|wc -l
第一个方案的解决是多执行一次jobs,可以解释成为了消除最后的Done结果,但是这种解释也是行不通的,因为循环是一直执行的,在echo里已经执行很多次jobs了,何止一次。
第二个方案是过滤掉jobs最后的输出结果Done这条语句。算是绕过问题得到了期待的结果。
个人感觉bash解释器优化掉了没有后台命令执行的jobs查询命令,如果是优化掉了那也应该有个空的返回,wc依然可以得到0的结果啊。所以这个问题找不到具体原因,如果你知道请告诉我,非常感谢。。。 这里先感谢just do shell群里的Eric 沉默的土匪 GS 三人,非常感谢你们的帮助。
这里两个方法不算好方法,只是奇怪这样为什么不行,行的又该如何解释。后来知道用wait命令就全解决了,耽误那么多时间还是用的不明智的方法。
转载请注明:三江小渡厚道喔!