shell软件工具设计的原则_转

随着时间的流逝,人们开发出了一套设计与编写软件工具的原则。在本书用来解决问题的程序中,你将会看到这些原则的应用示例。好的软件工具应该具备下列特点:
一次做好一件事
在很多方面,这都是最重要的原则。若程序只做一件事,那么无论是设计、编写、调试、维护,以及生成文件都会容易得多。举例来说,对于用来查找文件中是否有符合样式的grep程序,不应该指望用它来执行算术运算。
这个原则的结果,自然就是会不断产生出更小、更专用于特定功能的程序,就像专业木匠的工具箱里,永远会有一堆专为特定用途所设计的工具。
处理文本行,不要处理二进制数据
文本行是UNIX的通用格式。当你在编写自己的工具程序时便会发现,内含文本行的数据文件很好处理,你可以用任何唾手可得的文本编辑器来编辑它,也可以让这些数据在网络与各种机器架构之间传输。使用文本文件更有助于任何自定义工具与现存的UNIX程序之间的结合。
使用正则表达式
正则表达式(regular expression)是很强的文本处理机制。了解它的运作模式并加以使用,可适度简化编写命令脚本(script)的工作。
此外,虽然正则表达式多年来在工具与UNIX版本上不断在变化,但POSIX标准仅提供两种正则表达式。你可以利用标准的库程序进行模式匹配的工作。这样就可以编写出专用的工具程序,用于与grep一致的正则表达式(POSIX称之为基本型正则表达式,Basic Regular Expressions,BRE),或是用于与egrep一致的正则表达式(POSIX称之为扩展型正则表达式,Extended Regular Expressions,ERE)。
默认使用标准输入输出
在未明确指定文件名的情况下,程序默认会从它的标准输入读取数据,将数据写到它的标准输出,至于错误信息则会传送到标准错误输出(这部分将于第2章讨论)。以这样的方式来编写程序,可以轻松地让它们成为数据过滤器(filter),例如,组成部分的规模越大,越需要复杂的管道(pipeline)或脚本来处理。
避免喋喋不休
软件工具的执行过程不该像在"聊天"(chatty)。不要将"开始处理"(starting processing)、"即将完成"(almost done)或是"处理完成"(finished processing)这类信息放进程序的标准输出(至少这不该是默认状态)。
当你有意将一些工具串成一条管道时,例如:
1. tool_1 datafile tool_2 tool_3 tool_4 resultfile
若每个工具都会产生"正处理中"(yes I‘m working)这样的信息并送往管道,那么别指望执行结果会像预期的一样。此外,若每个工具都将自己的信息传送至标准错误输出,那么整个屏幕画面就会布满一堆无用的过程信息。在工具程序的世界里,没有消息就是好消息。
这个原则其实还有另外一个含义。一般来说,UNIX工具程序一向遵循"你叫它做什么,你就会得到什么"的设计哲学。它们不会问"你确定吗?"(are you sure)这种问题,当用户键入rm somefile,UNIX的设计人员会认为用户知道自己在做什么,然后毫无疑问地rm删除掉要删除的文件(注5)。
输出格式必须与可接受的输入格式一致
专业的工具程序认为遵循某种格式的输入数据,例如标题行之后接着数据行,或在行上使用某种字段分隔符等,所产生的输出也应遵循与输入一致的规则。这么做的好处是,容易将一个程序的执行结果交给另一个程序处理。
举例来说,netpbm程序集(注5)是用来处理以Portable BitMap(PBM)格式保存的图像文件(注6)。这些文件内含bitmapped图像,并使用定义明确的格式加以绘制。每个读取PBM文件的工具程序,都会先以某种格式来处理文件内的图像,然后再以PBM的格式写回文件。这么一来,便可以组合简单的管道来执行复杂的图像处理,例如先缩放影像后,再旋转方向,最后再把颜色调淡。
让工具去做困难的部分
虽然UNIX程序并非完全符合你的需求,但是现有的工具或许已经可以为你完成90%的工作。接下来,若有需要,你可以编写一个功能特定的小型程序来完成剩下的工作。与每次都从头开始来解决各个问题相比,这已经让你省去许多工作了。
构建特定工具前,先想想
如前所述,若现存系统里就是没有需要的程序,可以花点时间构建满足所需的工具。然而,动手编写一个能够解决问题的程序前,请先停下来想几分钟。你所要做的事,是否有其他人也需要做?这个特殊的工作是否有可能是某个一般问题的一个特例?如果是的话,请针对一般问题来编写程序。当然,这么做的时侯,无论是在程序的设计或编写上,都应该遵循前面所提到的几项原则。

摘自:《shell脚本学习指南》

通过学习本书,你不仅能了解UNIX工具集,还能吸收到UNIX的中心思想与软件工具设计的原则。

时间: 2024-10-12 14:50:14

shell软件工具设计的原则_转的相关文章

一些软件设计的原则_转

转自:酷壳 coolshell https://coolshell.cn/articles/4535.html   陈皓 以前本站向大家介绍过一些软件开发的原则,比如优质代码的十诫和Unix传奇(下篇)中所以说的UNIX的设计原则.相信大家从中能够从中学了解到一些设计原理方面的知识,正如我在<再谈"我是怎么招聘程序">中所说的,一个好的程序员通常由其操作技能.知识水平,经验层力和能力四个方面组成.在这里想和大家说说设计中的一些原则,我认为这些东西属于长期经验总结出来的知识.

03-04面向对象设计原则_设计实验

设计实验 有 3 个开关:a b c 有 3 个电灯:x y z 要求实现: a 能控制 x b 能控制 x, y c 能 x 注意:1个灯泡可以被多个开关控制:1个开关可以同时控制多个灯泡 所谓"控制":当开关操作时,当前灯泡的状态发生翻转.亮->灭 或 灭->亮 import java.util.*; class Light { private boolean state; // 灯的状态.true: 亮 public String toString() { if(st

设计四原则之如何设计漂亮的简历

在这个看脸的世界,设计漂亮的简历就是给简历一个好的脸蛋.那么如何设计美观的简历呢?我的答案是 设计四原则  +  LaTeX排版 下面先放出我设计的一份简历模板,然后依次讲解. 如果你的第一印象被上面的简历吸引了(只看外观,内容都是瞎掰的O(∩_∩)O哈哈~),并且有拿起电话播(+86)8888-888-888的冲动,那么,继续往下看吧. 首先,记住设计四原则: 1.  对比(Contrast) 2.  重复(Repetition) 3.  对齐(Alignment) 4.  亲密性(Prixi

数据结构课程设计题目四_二叉树

本文出自:http://blog.csdn.net/svitter 题目4:二叉树 给出一颗无线的二叉树.树的每一个结点用一整数对标识.二叉树构造如下 树根被标识为(1, 1): 如果一个结点被标识为(a, b), 则其左孩子被标识为(a+b,b),右孩子被标识为(a, a+b).现在给出某一结点(a, b),求树根到该结点的最短路径,并且同时求出从树根出发向左走和向右走的次数.建议完成人数1人. 注:此处使用了STL_stack库函数,是不允许的,我图方便. //===============

如何设计接口原则?

如何设计接口? 众所周知,接口是提供给其他模块或者系统使用的一种约定或者规范.因此接口必须要保证足够的稳定性和易用性.这是设计接口的基本要求. 1.稳定性 接口必须相对稳定,否则将导致接口的使用者和提供者为了适应新接口而不断修改接口的实现,可能重复进行无用功,严重时影响整个软件开发进度.那么如何保证设计的接口相对稳定呢?    首先,接口的语义必须明确.包括接口调用方法.接口名称.参数的类型和名称.抽象的接口名称或者参数名称使人困惑或者理解错误.如下例:    History::SetAttri

表设计的原则与方法分析:追求表价值的最大化

表设计的原则与方法分析:追求表价值的最大化 在对象关系映射的应用系统设计中,对象就是表.对象关系即表关系,脱离对象设计表是错误的.对象的存在或价值在于它与其他对象的关系(设计研究的就是怎样处理对象以及对象之间的关系),不与其他对象产生关系的对象,或者说不与其他表有关系的表是没有价值的,不应创建. 当需求确定開始对系统进行设计时,首先进行对象分析.每个对象应具有唯一性,即对象的属性和方法唯一,能够明白的代表现实世界中的一种对象,因此与该对象相应的表的字段也具备唯一性.即在其它表中不应有反复字段.

浙江理工大学公开课:设计与生活_全6集_网易公开课

浙江理工大学公开课:设计与生活_全6集_网易公开课 中国大学视频公开课  浙江理工大学公开课:设计与生活

设计指导原则

设计指导原则 一. 性能相关: 避免在循环内部new一些没有必要每次都new的对象. 所有与IO相关的操作,都需要考虑性能问题,一般采取的措施是连接池,缓存,减少调用次数,合并请求. 每个业务都要分析整个请求链路,找到瓶颈,通过压测的方式确认问题及验证解决方案. 根据业务情况,使用异步化和最终一致性. CPU,内存,网络IO,磁盘IO这些瓶颈,需要知道在合适的场景牺牲什么换取什么.通俗的讲是空间换时间,还是时间换空间.不同业务场景下,要做合理的取舍.例如多线程并发查询后merge.这个就是利用C

扁平化设计五大原则

扁平化设计五大原则 摘要:这段时间以来,扁平化设计一直是设计师之间的热门话题.那什么是扁平呢?designmodo设计师Carrie Cousins总结扁平化的五大特点,并且介绍了“准”扁平化设计理念及其优缺点. 这段时间以来,扁平化设计一直是设计师之间的热门话题.每个人都有自己的独特认识,有的非常喜欢而有的人却恰恰相反.那什么是扁平呢? designmodo设计师Carrie Cousins在网站上介绍了扁平化的五大特点,以及“准”扁平化设计的优缺点.CSDN编译如下. Cousins表示他虽