这篇总结的真好,偶尔遇见,记录下来。

学习高级Bash脚本编程指南

没有程序语言是完满的. 甚至没有一个惟一最好的语言, 只有对于特定目标, 比拟适宜和不适宜的程序语言.                                                                    Herbert Mayer

一个shell脚本是一个相似于"小吃店的(quick and dirty)"办法, 在你应用原型设计一个简单的利用的时候. 在工程开发的第一阶段, 即便从性能中获得很无限的一个子集放到shell脚本中来实现往往都是十分有用的. 应用这种办法, 程序的后果能够被测试和尝试运行, 并且在解决应用诸如C/C++, Java或者Perl语言编写的最终代码前, 次要的缺点和陷阱往往就被发现了.

Shell脚本遵循典型的UNIX哲学, 就是把大的简单的工程分成小规模的子工作, 并且把这些部件和工具组合起来. 许多人认为这种方法更好一些, 至多这种方法比应用那种高\大\全的语言更美, 更愉悦, 更适宜解决问题. 比方Perl就是这种无能任何事能适宜任何人的语言, 然而代价就是你须要强制本人应用这种语言来思考解决问题的方法.

什么时候不适宜应用Shell脚本

  • 资源密集型的工作, 尤其在须要思考效率时(比方, 排序, hash等等).
  • 须要解决大工作的数学操作, 尤其是浮点运算, 准确运算, 或者简单的算术运算(这种状况个别应用C++或FORTRAN来解决).
  • 有跨平台移植需要(个别应用C或Java).
  • 简单的利用, 在必须应用结构化编程的时候(须要变量的类型查看, 函数原型, 等等).
  • 至关重要的利用, 比如说为了这个利用, 你须要赌上本人的农场, 甚至赌上你们公司的将来.
  • 对于平安有很高要求的工作, 比方你须要一个强壮的零碎来避免入侵, 破解, 歹意毁坏等等.
  • 工程的每个组成部分之间, 须要连锁的依赖性.
  • 须要大规模的文件操作(Bash受限于程序地进行文件拜访, 而且只能应用这种蠢笨的效率低下的一行接一行的解决形式. ).
  • 须要多维数组的反对.
  • 须要数据结构的反对,比方链表或数组等数据结构.
  • 须要产生或操作图形化界面GUI.
  • 须要间接操作系统硬件.
  • 须要I/O或socket接口.
  • 须要应用库或者遗留下来的旧代码的接口.
  • 集体的, 闭源的利用(shell脚本把代码就放在文本文件中, 全世界都能看到).

如果你的利用合乎上边的任意一条, 那么就考虑一下更弱小的语言吧--或者是Perl, Tcl, Python, Ruby -- 或者是更高层次的编译语言比方C/C++, 或者是Java. 即使如此, 你会发现, 应用shell来原型开发你的利用, 在开发步骤中也是十分有用的.