33.6. 优化
优质
小牛编辑
137浏览
2023-12-01
大多数shell脚本处理不复杂的问题时会有很快的解决办法. 正因为这样,优化脚本速度不是一个问题. 考虑这样的情况, 一个脚本处理很重要的任务, 虽然它确实运行的很好很正确,但是处理速度太慢. 用一种可编译的语言重写它可能不是非常好的选择. 最简单的办法是重写使这个脚本效率低下的部分. 这个代码优化的原理是否同样适用于效率低下的shell脚本?
检查脚本中的循环. 反复执行操作的时间消耗增长非常的快. 如果可能, 可以从循环中删除时间消耗的操作.
优先使用内建(builtin)命令而不是系统命令. 内建命令执行起来更快并且一般调用时不会产生新的子shell.
避免不需要的命令, 特别是管道(pipe).
1 cat "$file" | grep "$word" 2 3 grep "$word" "$file" 4 5 # 上面的命令行有同样的效果, 6 #+ 但第二个运行的更有效率,因为它不产生新的子进程.
cat命令似乎特别常在脚本中被滥用.
用time和times工具去了解计算花费的时间. 考虑用C甚至是汇编重写关键的消耗时间的部分.
尝试最小化文件I/O. Bash在文件处理上不是特别地有效率, 所以要考虑在脚本中使用更合适地工具来处理,比如说awk或 Perl.
采用结构化的思想来写脚本, 使各个模块能够依据需要组织和合并起来.一些适用于高级语言的优化技术也可以用在脚本上 , 但有些技术, 比如说循环优化,几乎是不相关的. 上面的讨论, 依据经验来判断.
怎样优化减少执行时间的优秀脚本示例, 请参考例子 12-42.