小论文,大家多批评指导:)
======
摘 要: 低效的shell脚本设计会进一步影响原本解释器模式下并不见长的程序运行效率,使其在面对大数据量文本分析时的资源与时间消耗变成难以接受的。本文分析了shell语言及其应用需求的特点,从分层设计的角度提出了“自底向上进行shell脚本编程”的理论,同时提出了从“外部系统环境”到“内部执行模式”全面的掌握工具软件的方法。实例充分证明,自底向上的shell脚本编程思想及方法能够有效提高脚本的执行效率。
关键词: 脚本; 正则;管道
引言
伴随着UNIX四十多年的发展,shell已经从最初的命令解释器发展成为现今强大的计算机语言, shell脚本编程以其简便快捷的特色广泛应用于日常系统管理操作上,熟悉并精通shell脚本编程已是系统管理员必备的技能。
1992年IEEE通过了关于“shell and utilities”的IEEE Std 1003.2-1992标准,即POSIX.2标准,并于2001年合并至IEEE Std 1003.1-2001。该标准给出了关于操作系统支持的shell命令解释器及由其内置命令(built-in)、系统工具和其他应用程序等组成的工具软件(utilities)的标准接口。
shell脚本开发便是这样一个整体的编程过程:基于shell结构化程序设计语言,并通过调用上述工具软件,形成类似命令批处理程序的shell脚本。shell与工具软件的紧密联系使得shell脚本开发具有鲜明的“自底向上”编程风格。掌握shell脚本编程既要熟悉shell程序设计语言,同时也要熟练掌握find/sed/awk/grep等各种工具软件。
1 shell脚本优化的意义
编写高效的shell脚本,这不仅是出于优秀程序员对精简高效程序的追求,更为了满足实际的应用需求。shell是一种解释型语言,尽管从执行方式方面考虑,解释型程序的效率上比不上C语言等编写的编译型程序,但脚本其所具有的简便快捷的特点使其能够有效实现对系统任务和重复性任务的自动化管理操作,普遍应用在日常的数据处理之中。
系统管理员在进行系统信息采集或网站日志处理中经常要面对从上百万或更大数据量的文件中提取、分析数据的需求,实际上优化shell脚本效率的效用直接体现在这种大数据量的文本处理上。低效的shell脚本设计会进一步影响原本解释型执行模式下并不见长的shell脚本运行效率,特别是在面对大数据量文本分析时的资源与时间消耗变成难以接受的。
此外,程序的优化需要有针对性,盲目的优化是费时费力的。“过早的优化,是万恶之源”。算法大师Donald E. Knuth曾分析到:程序员经常会由于预先的判断错误把97%的时间花费在优化非关键模块的效率之上,却只花了3%的时间在关键模块上,因此过早的优化是没必要的,只有确定了关键模块的真正所在,对其进行的优化才是有价值的。如何有针对性的去优化shell脚本,提高脚本执行效率?
2 shell脚本优化的方法
从shell的编程模式来看,shell结构语言与各应用软件紧密结合的特色使shell编程具有鲜明的自底向上的编程风格。Shell和系统分别提供各种内置函数和工具软件,这些工具软件相当于程序设计中可重用的模块代码, 并且是采用C语言等语言开发的高效模块。这些工具软件的使用大大弥补了shell作为解释器在效率上的缺陷。同时尽管在应用需求上存在交叉,不同的工具具有不同的执行模式使其在解决同一个需求也存在效率上的差别,因此,采用何种工具直接影响着shell脚本的执行效率。
下边是一个工具软件应用效率的体现实例 :
需求:计算1到100000累加结果
方法1:采用bash