您的位置:首页 > 运维架构 > Shell

shell脚本优化原则(持续更新)

2010-03-20 19:59 260 查看
1、能用内建命令完成的功能尽量不要使用外部命令,因为使用外部命令会fork新的进程抢占cpu和内存资源。可通过type 命令查看命令是否为内建命令。
2、在脚本中若有代码段需要重用时,最好写成函数形式,可提高脚本执行效能,原因是它将命令放在内存里,这样会更有效率。
3、操作字符串时,能使用${}完成功能的尽量不要使用awk,sed等,原因类似第一条。
4、尽量少用“|”(管道),管道是很耗资源的。下面我们来做个测试。
向一个文件写入10000行随机数
1)使用管道:
cat ceshi.sh
#!/bin/bash
for((i=0;i<=10000;i++));do
echo $RANDOM |tee -a data.txt
done
2)使用内置命令>>:
cat ceshi.sh
#!/bin/bash
for((i=0;i<=10000;i++));do
echo $RANDOM >> data.txt
done
执行脚本 time sh ceshi.sh
结果:
1)real 0m16.876s
user 0m3.639s
sys 0m13.504s
2)real 0m0.474s
user 0m0.375s
sys 0m0.099s
我们这回知道什么叫差距了,当然了一部分时间消耗在tee命令的运用上了。

再举个例子:先看一下http://bbs.chinaunix.net/thread-1006441-1-1.html
这位网友的问题完全可以用sort -t, -k 4 -u infile 来解决,其实真正耗费资源的不是sort而是过多的运用了管道。

5,批量重复命令可选择放入后台执行,提高执行效率,可采用管道来控制同时放入后台执行的进程数以避免负载过高。具体可参考本博《 SHELL模拟多线程脚本的详细注解 》一文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息