1. Unix 简史

UNIX 最初是由贝尔实验室(Bell Telephone Laborataries)的计算机科学研究中心开发的,第一版诞生于1970年--也就是在贝尔实验室退出Multics项目不久.在 UNIX 广受欢迎的功能中,有许多便是来自Multics 操作系统.

它有下列优势:

  • 系统由用户自行开发.他们使用这套系统来解决每天遇到的计算问题.
  • 研究人员不受拘束地进行试验,必要时也可以任意变换程序.
  • 贝尔实验室的研究人员都是计算机科学家,他们所涉及的系统不单单自己使用,也分享给同事们---这些人也是计算机科学家,因此衍生出"务实"的设计模式:程序会执行你所赋予的任务,但不会和你进行对话,也不会问你一堆"你确定吗?"之类的问题.
  • 除了精益求精,在设计和问题解决上他们不断地追求"优雅".关于"优雅"有一个贴切的定义:简单就是力量(power cloaked in simplicity).

也因此存在如下缺陷:

  • 工具程序之间存在许多不一致的地方.
  • 组多工具程序有缺陷.
  • 有时程序并未经过彻底测试,这使他们在执行的时候一不小心就会遭到破坏.
  • 系统的文档尽管大致上内容完备,但极为简单,是的用户在学习的时候很难找到所需要的信息.

2.软件工具的原则

  • 一次做好一件事情

很多时候这都是最重要的原则,若程序只做一件事情,那么无论是设计,编写,调试,维护,以及生成文件都容易的多.

  • 处理文本行,不要处理二进制数据

文本行是 UNIX 的通用格式.它可以用任何唾手可得的文本编辑器来编辑它,也可以让这些数据在网络和各种机器架构之间传输.舒勇该文本文件更有助于任何自定义工具与现存的 UNIX 程序之间的结合.

  • 使用正则表达式

正则表达式(regular expression)是很强的文本处理机制.了解它的运作模式并加以实用可以湿度简化编写命令脚本的工作.

  • 默认使用标准输入/输出

在未指明指定文件名的情况下,程序默认会从它的标准输入读取数据,将数据写到它的标准输出,至于错位信息则会传送到标准错误输出.以这样的方式来编写程序可以轻松地让它们成为数据过滤器.

  • 避免喋喋不休

软件工具的执行过程不该像"聊天"(chatty).不要将"开始处理"(starting processing),"即将完成"(almost done)或"处理完成"(finished processing)这类信息放在程序的标准输出中(至少这不该是默认状态).

3.shell脚本的目标使用情景

shell 脚本最长用于系统管理工作,或是用于结合现有的程序以完成小型的,特定的工作.一旦你找出完成工作的方法,把命令串在一起,放进一个独立的程序或者脚本里面,此后只需要执行该程序便能完成工作. 如果你写的程序很有用,替他人可以利用该程序当做一个黑盒来使用,它使一个可以完成工作的程序,但我们不必知道它如何完成的.

4. 脚本编程语言和编译型语言的差距

许多大中型程序都是用编译型语言写成的,例如 Paxcal,C,C++或 Java.这类程序只要从源代码(source code)转换成目标代码(object code),便能直接通过计算机来执行.编译型语言的好处是高效,缺点是:他们多半运作与底层,所处理的字节\整数\浮点数或者其他机器层级的对象.

脚本编程语言通常是解释型(interpreted)的,这类程序的执行,是由解释器(interprete r)读入程序代码,并将其转换成内部的形式,再执行.注意:解释器本身是一般的编译型程序.

使用脚本编程语言的好处是,他们多半运行在比编译型语言还高的层级,能能够情已处理文件和目录之类的对象.缺点是:他们的效率通常不如编译型语言.不过权衡之下,通常使用脚本编程还是值得的:花1个小时写成的简单脚本,同样的功能用 C 或 C++来编写实现可能需要两天,而且一般来说脚本执行的速度已经够快了,快到足以让人忽略它性能上的问题.

shell 似乎是各 UNIX 系统之间通用的功能,并且经过了 POSIX 的标准化,因此 shell 脚本只要"用心写"一次,即可应用在各个系统上.因此,使用 shell 脚本是基于:

  • 简单性
  • 可移植性
  • 开发容易

shell复习笔记----入门知识的更多相关文章

  1. shell复习笔记----查找与替换

    查找文档 以grep 程序查找文本(匹配文本 matching text)相当方便.传统上有三种程序可以用来查找整个文本文件. grep 最早的文本匹配程序.其最简单的方式就是使用固定字符串 $ wh ...

  2. shell复习笔记----命令与参数

    shell最基本的工作就是执行命令. 每键入一道命令, shell 就会执行. $cd work;ls -l whizprog.c 首先:格式很简单,以空白(Space 键或者 Tab键)隔开命令行中 ...

  3. shell复习笔记----用户管理

    $ who    可以知道系统上有多少登陆 $who |wc -l 计算用户个数 注意:|是管道符号,可以在两个程序之间建立管道(pipeline):who 的输出,成了 wc 的输入, wc 所列出 ...

  4. R语言学习笔记 (入门知识)

    R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...

  5. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  6. 我的Python笔记补充:入门知识拾遗

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...

  7. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  8. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  9. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

随机推荐

  1. .net平台 .net Framework 组织结构 .net Framework类库 CLR C# 介绍

    一..net平台 .NET现在可以看成微软的一个品牌,微软有两个非常成功的品牌,那就是Windows和Office. .NET会成为微软的另一个品牌.它不仅仅是一组技术,产品,或服务(微软的服务包括M ...

  2. 【转载】Apache Kafka:下一代分布式消息系统

    http://www.infoq.com/cn/articles/kafka-analysis-part-1 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩 ...

  3. HDOJ2023求平均成绩

    求平均成绩 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. ASSERT报错:error C2664: “AfxAssertFailedLine”: 不能将参数 1 从“TCHAR []”转换为“LPCSTR”

    转载请注明来源:崨雁嫀筝 http://www.cnblogs.com/xuesongshu 这个错误是我在把tinyxml修改为宽字符(Unicode)版本时候遇到的问题,我首先按关键字把所有有ch ...

  5. OC第一天-Xcode、工程组成及运行状态

    Xcode 中iOS工程模版: 1.Application类型: Master-detail Application. 可以构建树形结构导航模式应用,生成的代码中包含了导航控制器和表示图控制器.(表示 ...

  6. CSS常见的浏览器前缀

    为了让浏览器识别某些专属属性,有时候需要在CSS属性前增加浏览器前缀 -ms-:Microsoft IE -moz-:Mozilla Firefox -o-:Opera Opera -webkit-: ...

  7. GISer 应届生找工作历程(完结)

    有半个月没更博客了,前几天在学校准备这保研,因为没有时间复习高数自然就没有过.    也没啥的,我本来就不打算复习,就是看看运气咋样(哈哈).在昨天开始跑的招聘会,一天下来不同地方跑了三家挺累的,记录 ...

  8. CAF(C++ actor framework)使用随笔(unbecome与keep_behavior用法)

    看usermanual(使用随笔一里面有)看到差不多一半的时候,这个keep_behavior与unbeacome的结合引起了我的注意.(这是为什么呢?) 因为它的示例代码写的太简单了!我真的没看太懂 ...

  9. Android Studio生成APK自动追加版本号

    转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/android-apk-studio-generated-automatically-appends-a-ve ...

  10. 九度 1420 Jobdu MM分水果 -- 动态规划、深度优先搜索

    题目地址:http://ac.jobdu.com/problem.php?pid=1420 题目描述: Jobdu团队有俩PPMM,这俩MM干啥都想一样.一天,富强公司给团队赞助了一批水果,胡老板就把 ...