Shell
Shell 就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与 系统之间进行交互的作用。
4.1.1 Shell 的基本概念
1. 什么是 Shell
Shell 就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户 与系统之间进行交互的作用。Shell 在 Linux 系统中具有极其重要的地位,如图 4-1 所示
第 4 章 Shell 与 Vi 编辑器
diff
grep
vi wc sh gcc
ls hardware stack interface kernnel bash multitasking device TCP/IP who shell utiliites
cat
图 4-1 Linux 系统结构组成
2. Shell 的功能
Shell 最重要的功能是命令解释,从这种意义上来说,Shell 是一个命令解释器。Linux
系统中的所有可执行文件都可以作为 Shell 命令来执行。将可执行文件作一个分类,如表 4-1 所示。
表 4-1 可执行文件的分类
类别 Linux 命令 内置命令 实用程序 用户程序 Shell 脚本 说明 存放在/bin、/sbin 目录下 出于效率的考虑,将一些常用命令的解释程序构造在 Shell 内部 存放在/usr/bin、/usr/sbin、/usr/local/bin 等目录下的实用程序 用户程序经过编译生成可执行文件后,也可作为 Shell 命令运行 由 Shell 语言编写的批处理文件 当用户提交了一个命令后,Shell 首先判断它是否为内置命令,如果是就通过 Shell 内 部的解释器将其解释为系统功能调用并转交给内核执行;若是外部命令或实用程序就试图 在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。在 查找该命令时分为两种情况:
用户给出了命令路径,Shell 就沿着用户给出的路径查找,若找到则调入内存,若没有 则输出提示信息;
用户没有给出命令的路径,Shell 就在环境变量 PATH 所制定的路径中依次进行查找, 若找到则调入内存,若没找到则输出提示信息。
图 4-2 描述了 Shell 是如何完成命令解释的。
- 71 -
第 4 章 Shell 与 Vi 编辑器
用户输入命令
提交给 shell
是否为内置命令 是外部命令或实用程序
是内置命令 在系统中查找该命令的 文件并调入内存执行
内核中的系统功能调用
图 4-2 Shell 执行命令解释的过程
此外,Shell 还具有如下的一些功能:
? SHELL 环境变量 ? 正则表达式
? 输入输出重定向与管道
3. Shell 的主要版本
表 4-2 列出了几种常见的 Shell 版本。
表 4-2 Shell 的不同版本
版本 说明 Bash 是大多数 Linux 系统的默认 Shell。 Bash 与 bsh 完全向后兼容,并 且在 bsh 的基础上增加和增强了很多特性。Bash 也包含了很多 C Shell 和 Korn Bourne Again Shell Shell 中的优点。Bash 有很灵活和强大的编程接口,同时又有很友好的用户 (Bash. bsh 的扩展) 界面。 Korn Shell (ksh)由 Dave Korn 所写。它是 UNIX 系统上的标准 Shell。 另Linux 环境下有一个专门为 Linux 系统编写的 Korn Shell 的扩展版 本,Korn Shell ( ksh ) 外,在 即 Public Domain.Korn Shell(pdksh)。 tcsh ( csh 的扩展) tcsh 是 C. Shell 的扩展。tcsh 与 csh 完全向后兼容,但它包含了更多的 使用户感觉方便的新特性,其最大的提高是在命令行编辑和历史浏览方面。
- 72 -
第 4 章 Shell 与 Vi 编辑器
4.1.2 Shell 环境变量
Shell 支持具有字符串值的变量。Shell 变量不需要专门的说明语句,通过赋值语句完 成变量说明并予以赋值。在命令行或 Shell 脚本文件中使用$name 的形式引用变量 name 的 值。
1. 变量的定义和引用
在 Shell 中,变量的赋值有下列句法格式:
name=string
其中,name 是变量名,它的值就是 string“,=”是赋值符号。变量名是以字母或下划 线开头的字母、数字和下划线字符序列。
通过在变量名(name)前加$字符(如$name)引用变量的值,引用的结果就是用字符 串 string 代替$name。此过程也称为变量替换。
在定义变量时,若 string 中包含空格、制表符和换行符,则 string 必须用?string?或 者”sting”的形式,即用单(双)引号将其括起来。双引导内允许变量替换,而单引导内则 不可以。
下面给出一个定义和使用 Shell 变量的例子。
使用和定义 Shell 变量举例 //显示字符常量
$ echo who are you who are you $ echo ?who are you?
who are you
$ echo ”who are you”
who are you
$ //由于要输出的字符串中没有特殊字符,所以? ?和” ”的效果是一样的,不用””相当于使用””
$ echo Je t?aime
> //由于要使用特殊字符(?), //由于?不匹配,Shell 认为命令行没有结束,回车后会出现系统第二提示符, //让用户继续输入命令行,按 ctrl+c 结束
$ //为了解决这个问题,可以使用下面的两种方法
$ echo ”Je t?aime” Je t?aime $ echo Je t\\?aime
- 73 -
Je t?aime 第 4 章 Shell 与 Vi 编辑器
- 74 -