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. Linux时间函数

    一.时间编程 1.核心理论 (1).时间类型 2.函数学习 (1).获取日历时间 函数名:time 函数原型:time_t time(time_t *t) 函数功能:获取当前日历时间 所属头文件:&l ...

  2. HTTP状态码解读

    1xx:信息 消息 描述 100 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求. 101 Switching Protocols 服务器转换协 ...

  3. github果然强大

    github果然强大,在idea里写好,可以直接提交到github,在哪台电脑都可以看源码了,手机也可以看 https://github.com/gaojinhua

  4. 在SQL 2012中使用和Oracle 一样的序列

    使用过Oracle的都知道,Oracle中的自增是靠序列来完成的,在一定程度上蛮方便的.现在SQL 2012中也有序列了.来看看怎么做的吧! SQL Server 现在将序列当成一个对象来实现,创建一 ...

  5. 第四篇、CocoaPods 镜像的更新 原来的淘宝镜像已经不再更新

    在开发应用,我们常常使用cocoaPods来管理第三方框架,但是原来的淘宝的镜像不更新了 新的镜像地址:https://gems.ruby-china.org/

  6. iOS开发——根据Url 获取图片尺寸

    转自:http://www.oschina.net/code/snippet_2248391_53038 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:( ...

  7. (转)理解SQL SERVER中的分区表

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  8. Windows系统 环境变量

    用户变量与系统变量 用户变量只对当前用户有效,而系统变量对所有用户有效.在检索命令时,系统变量会排在用户变量的前面.也就是说,如果两个地方都包含同一个命令,则优先执行系统变量指示路径下的命令. set ...

  9. DDL_数据库模式定义语言

    2014年11月22日 15:53:24 DDL 定义  define 概念:是用于描述数据库中要存储的现实世界实体的语言.一个数据库模式包含该数据库中所有实体的描述定义.               ...

  10. 利用mysqld_multi启动管理多实例

    利用mysqld_multi启动管理多实例 官方管理多实例的一个脚本peer #将之前的目录清空 [root@mysql01 mysql]# tree /data/mysql/ /data/mysql ...