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模拟多线程脚本的详细注解 》一文。
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模拟多线程脚本的详细注解 》一文。
相关文章推荐
- 一些 Shell 脚本(持续更新)
- shell脚本--持续更新
- shell脚本常见符号(持续更新)
- shell脚本编程超级群-问题集合-->持续更新中
- CentOS 6 系统优化 Shell 脚本 (持续更新)
- [Linux学习]Shell脚本(1)--函数,输入,if判断(持续更新)+删除空行 +保存当前路径
- Shell脚本学习心得[持续更新]
- 利用shell脚本实现计划任务功能 V1.2(持续更新)
- shell 脚本实例--持续更新
- VIM编写shell脚本程序之个人体会 持续更新中。。。
- Shell 小脚本集合----持续更新
- <Linux> Shell脚本(持续更新)
- 优化原则(持续更新)
- 100个shell脚本【持续更新】 推荐
- shell脚本学习(持续更新)
- listbox优化攻略(持续更新中)
- 利用SHELL脚本实现文件完整性检测程序(1.2版更新)
- 常用的shell脚本案例(14.04.15更新)
- 更新本地代码到服务器的shell脚本