shell复习笔记----入门知识
- 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复习笔记----入门知识的更多相关文章
- shell复习笔记----查找与替换
查找文档 以grep 程序查找文本(匹配文本 matching text)相当方便.传统上有三种程序可以用来查找整个文本文件. grep 最早的文本匹配程序.其最简单的方式就是使用固定字符串 $ wh ...
- shell复习笔记----命令与参数
shell最基本的工作就是执行命令. 每键入一道命令, shell 就会执行. $cd work;ls -l whizprog.c 首先:格式很简单,以空白(Space 键或者 Tab键)隔开命令行中 ...
- shell复习笔记----用户管理
$ who 可以知道系统上有多少登陆 $who |wc -l 计算用户个数 注意:|是管道符号,可以在两个程序之间建立管道(pipeline):who 的输出,成了 wc 的输入, wc 所列出 ...
- R语言学习笔记 (入门知识)
R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- 我的Python笔记补充:入门知识拾遗
声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- Java基础入门知识
Java编程入门知识 知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
随机推荐
- C#.net拖拽实现获得文件路径
思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等), 在DragDrop事件中对“信息”进行解析. 窗体的AllowDrop属性必须设置成tru ...
- 新增html元素的使用
今天学习HTML5中新增元素的使用 (Ⅰ)新增主体结构元素 Section元素:用于对网站或应用程序中的内容进行分块. <section> <h1></h1> &l ...
- Android 扫描蓝牙设备
Android扫描蓝牙设备是个异步的过程,核心的步骤为:调用bluetoothAdapter的startDiscovery()进行设备扫描,扫描的结果通过广播接收处理!具体如下: 1.申请相关权限 & ...
- SQL Server 编程入门经典(3)之T-SQL基本语句
本章内容简介: 如何从数据库检索数据(SELECT) 如何向表中插入数据(INSERT) 如何适当更新数据(UPDATE) 如何删除表中数据(DELETE) 3.1 基本SELECT语句 如果你在此 ...
- 【Android学习】自定义Android样式checkbox
下面简单介绍下在Androdi中如何更改Checkbox的背景图片,可以自定义样式 1.首先res/drawable中定义编写如下样式的XML,命名为:checkbox_style: <?xml ...
- iOS开发 中的代理实现
iOS开发 中的代理实现 关于今天为什么要发这篇文字的原因:今天在和同事聊天的时候他跟我说项目中给他的block有时候不太能看的懂,让我尽量用代理写,好吧心累了,那就先从写个代理demo,防止以后他看 ...
- Swift方法
Swift 中的方法是与特定类型(类和结构体)相关的函 数. 实例方法 隶属于某个特定类型(类或结构体)实例函数. class Counter{ var count = 0 funcincrement ...
- OC3_Copy及MultableCopy
// // main.m // OC3_Copy及MultableCopy // // Created by zhangxueming on 15/6/19. // Copyright (c) 201 ...
- (转)Salesforce的440亿美金并购宣告企业软件市场进入3.0互联网化时代
导语:Salesforce代表着“移动+云”时代企业软件领域新的架构和商业模式的颠覆者.企业软件转向“移动+云”架构,将极大改变传统企业IT市场的格局…… 近期一则新闻极大的刺激了企业软件市场的神经, ...
- 4月1日学习笔记(CSS基础)
CSS初始化 内边距padding padding属性宽度是按照上右下左的顺序来的,否则单独设置就是padding-left... 边框border border可以设置样式(border-style ...