下载
第10章 shell II (sh)
Bourne shell (s h )、C shell (c s h )以及Korn shell (k s h )是命令解释程序及高级编程语言。
作为命令解释程序,这些 s h e l l处理用户在命令行提示符下所输入的命令。当用户把一个 s h e l l作
为一种编程语言使用时,s h e l l处理存储在称为s h e l l脚本的文件中的一组的命令。与其他语言一
样,s h e l l具有变量和控制流命令(例如f o r循环和i f语句)。
使用s h e l l ,用户可以自定义工作环境。可以使自己的提示符显示工作目录名,为 c p命令创
建一个函数或者别名,以防止它覆盖文件,另外还可以利用关键字变量来改变s h e l l 的工作方式,
等等。用户也可以编写s h e l l脚本来做希望的事情:从存储了一个长而复杂命令的单行脚本(可
以使用户不必再输入它们)到运行一系列报告(为这些报告自动生成参数),然后打印它们,
并在作业完成的时候发信提醒用户。另外更复杂的 s h e l l脚本则本身就作为程序,它们不仅仅运
行其他的程序(参见第11、1 2和1 3章的示例)。
通常情况下,用户的根s h e l l总是单用户模式的Bourne shell 。所有的系统s h e l l脚本都编写
为在Bourne shell 下运行—如果用户在单用户模式下进行工作(或者是在引导系统的过程中,
或者是进行系统维护、管理或修复工作),这是个不错的主意,至少可以熟悉这个s h e l l 。
提示 本章覆盖哪种s h e l l 本章内容倾向于Bourne shell ,并使用注意事项和参考页来
说明与C shell或Korn shell 不同的地方。特别是 1 0 . 2节、 1 0 . 3节及 1 0 . 6节的内容,既适
用于Bourne shell ,同样也适用于C shell 和Korn shell 。
作业控制 1 0 . 5节不适用于Bourne shell ,因为s h不支持作业控制。Job shell(jsh)等
同于Bourne shell ,但是支持作业控制的完全实现。如果用户想尝试作业控制命令,要
确保用户正在运行j s h 而不是s h 。c s h和k s h 也支持作业控制,并且用户也可以使用它们
进行尝试。
如果用户都不熟悉这些s h e l l用户可能想推迟阅读本章的 1 0 . 5节“作业控制”和
本节,直到用户能够熟悉创建并运行简单的 s h e l l脚本。无论怎样,用户应该阅读 1 0 . 7
节“参数和变量”。除了用户创建的变量, s h e l l维持了几个关键字变量,这些变量控
制着s h e l l的重要的特性。
s h e l l编程 因为许多用户相对于c s h编程语言来说,更喜欢使用 Bourne shell 编程
语言,并且由于Bourne shell 与Korn shell 编程语言共享了许多通常的特性,所以本章
和接下来的一章详细描述了s h (和k s h )编程。
用户可以使用其他的 s h e l l ,但这并不是一个好主意。Bourne shell 是唯一静态连接的s h e l l (/ s b i n / s h e e l l )。如
果用户的计算机崩溃而且/ u s r文件系统不可用或者一些系统库遭到破坏,则没有其他的 s h e l l可以工作:用户
将不能引导用户的系统并试图修复破坏的部分,因为用户没有一个可用的 s h e l l 。如果用户想使用另一种s h e l l,
可以当系统处于单用户模式时来启动它。
第1 0章 shell II (sh) 计计319
下载
10.1 Bourne shell 背景
Bourne shell是一个早期的UNIX shell ,这个s h e l l是AT & T 的贝尔实验室的Steve Bourne所编
写的。经过这些年,Bourne shell 已经被扩展,并且仍然是与U N I X 许多商业版本一起提供给用
户的基本的s h e l l 。由于Bourne shell悠久而成功