打字猴:1.700436171e+09
1700436171
1700436172
1700436173
1700436174
1700436175
1700436176 shell脚本(shell script)是存储在文件中的一系列命令。用该文件作为输入源,运行shell实例,如同直接输入命令一样运行脚本中的命令:
1700436177
1700436178 $ sh
1700436179
1700436180
1700436181
1700436182
1700436183
1700436184 脚本封装命令序列。例如,对于本书,我写了一系列简单的检查命令,查找拼写和标点符号错误、不正确的格式化命令和其他可能存在的失误。这些检查中的每一项都会运行一个程序。我可以一遍又一遍地重复输入这些命令,也可以把命令序列放在一个叫check的脚本文件中,运行check指令就能做检查。其他的脚本则能输出书页,还能做备份。
1700436185
1700436186 虽然这些脚本是专为我和这本书而编写,但它们实际上是一套新Unix命令。这类个人命令是shell脚本的常见用法,可以快速应用频繁的计算操作。我现在还在用一些三四十年前写的脚本,这在Unix的长期用户中一点也不稀奇。
1700436187
1700436188 使shell程序完全等同于编译后的程序的最后一步:如果文件被标记为可执行文件,它将被传递给shell执行。这样一来,shell脚本就成了“一等公民”,在执行时与编译后的程序没有区别:
1700436189
1700436190 $ check book.txt
1700436191
1700436192
1700436193
1700436194
1700436195
1700436196 shell脚本并不能取代编译后的程序,但它们是程序员工具箱的重要组成部分,既适用于个人,也适用于大型任务。如果你发现自己一遍又一遍地运行着同样的命令序列,那就把它们放到shell脚本中,从而将烦琐工作变得自动化。如果某个shell脚本太慢,可以用其他语言重写。到下一节探讨管道(pipe)技术时,我们将看到shell脚本的更多力量。
1700436197
1700436198
1700436199
1700436200
1700436201 UNIX传奇:历史与回忆 [:1700434692]
1700436202 UNIX传奇:历史与回忆 4.4 管道
1700436203
1700436204 管道也许是Unix中最引人注目的创新。管道是一种机制,由操作系统提供,并通过shell轻松访问。它将程序的输出与另一程序的输入连接起来。操作系统让它发挥作用,只需要一个既简单又自然的shell符号就能用起来,结果是得到一种设计和使用程序的新思路。
1700436205
1700436206 将程序连接起来的想法由来已久。Unix语境中最清晰的陈述之一出现在道格·麦基尔罗伊在1964年写的一份内部文件里。这份文件提出,“像花园水管那样”把程序接在一起。图4-1的第一幅图来自我在贝尔实验室的办公室墙上挂了30年的陈旧纸页。其中有打字错误,打印质量也糟糕,这正好展示了打字文件通常是什么样子。第二幅图是更正后的抄本。
1700436207
1700436208
1700436209
1700436210
1700436211
1700436212
1700436213
1700436214 图4-1 道格·麦基尔罗伊关于管道的想法(1964年) [5]
1700436215
1700436216 道格原本想让程序与程序能够随意连接,但如何自然地描述一个无约束图并不那么容易,而且还存在语义上的问题:在程序之间流动的数据必须正确排队,而程序的无管理连接有可能容纳不了那么长的队列。而且肯无论如何也想不出实际应用场景。
1700436217
1700436218 但道格继续唠叨,肯继续思考。正如肯所说:“有一天,我想到了:管道。本质上就是管道。”他只花了一小时就在操作系统中添加了管道系统调用。他形容管道是“超级小菜”,因为I/O重定向的机制早已存在了。
1700436219
1700436220 肯将管道机制添加到shell,尝试使用。他说,结果“很震撼”。
[ 上一页 ]  [ :1.700436171e+09 ]  [ 下一页 ]