(1)什么是shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的-种接口(命令解释器), Shell接收用户输入的命令并把它送入内核执行,在用户与系统之间进行交互。Shell 在Linux 系统中具有极其重要的地位。
(2)Shell的功能
命令解释器是Shell 最重要的功能。Linux 系统中的所有可执行文件都可以作为Shell命令来执行。将Linux的可执行文件进行分类,如下表所示。
Linux系统上可执行文件的分类 | |
类 别 | 说 明 |
Linux命令 | 存放在/bin、/sbin目录下的命令 |
内置命令 | 出于效率的考思,将-些常用命令的解释段序构造在Shell内部 |
实用程序 | 存放在/usr/bin、/usr/sbin、/usrlocal/bin、/usrlocal/sbin等目录下的实用程序 |
用户程序 | 用户程序经过编译生成可执行文件后可作为Shell命令运行 |
Shell脚本 | 由Shell语言编写的批处理文件 |
Shell是如何完成命令解释的呢?
命令解释过程如下:
当用户提交了一个命令后,Shell 首先判断是否为内置命令(由Shell自身负责解释),如果是就通过Shell的解释器将其解释为系统功能调用并转交给内核执行;若是外部命令或实用程序,就试图在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。在查找该命令时分为两种情况:
①用户给出了命令的路径,Shell 就沿着用户给出的路径进行查找,若找到则调入内存,若没找到则输出提示信息。
②用户没有给出命令的路径,Shell 就在环境变量PATH所制定的路径中依次进行查找,若找到则调入内存,若没找到则输出提示信息。
此外,Shell 还具有如下功能。
●通配符、命令补全、别名机制、命令历史。
●重定向、管道、命令替换、Shell编程等。
(3)Shell 的主要版本
下表中列出了几种常见的Shell版本。RHEL/CentOS 下默认的Shell是bash。
版本 | 说明 |
Bourme Again Shell | bash是大多数Linux系统的默认Shell,bash与bsh完全向后兼容,并且在bsh的基础上增加和增强了很多特性。bash也包含了很多C Shell和Kom Shell中的优点。bash有很灵话和强大的编程接口,同时又有很友好的用户界面 |
Kom Shell(ksh) | Kom Shell(ksh)由Dave Korm所写。是UNIX系统上的标准Shell。另外,在Linux环境下有一 |
tcsh(csh的扩展) | tcsh是C Shell的扩展。tcsh与csh完全向后兼容。但它包含了更多的使用户感觉方便的新特性,其最大的提高是在命令行编辑和历史浏览方面 |
(4)Shell的元字符
在Shell 中有一-些具有特殊的意义字符,称为Shell 元字符(Shell Metacharacters)。若不以特殊方式指明,Shell 并不会把它们当作普通文字符使用。
下表中简单介绍了常用的Shell元字符的含义。
元字符 | 含 义 |
· | 代表任意字符串 |
? | 代表任意字符 |
/ | 代表根目录或作为路径间隔符使用 |
转义字符。当命令的参数要用到保留字时,要在保留字前面加上转义字符 | |
<Enter> | 续行符。可以使用续行符将-一个命令行分写在多行上 |
$ | 变量值置换,如$PATH表示环境变量PATH的值 |
' | 在'... '中间的字符均被当作文字处理。指令、文件名、保留字等都不再具有原来的意义 |
" | 在"..."中间的字符公被当作文字处理并允许变量值置换 |
` | 命令替换,置换`...`中命令的执行结果 |
< | 输入重定向字符 |
> | 输出重定向字符 |
| | 管道字符 |
& | 后台执行字符。在-个命令之后加上字符“&"。该命令就会以后台方式执行 |
; | 分割顺序执行的多个命令 |
() | 在子Shell中执行一组命令 |
{} | 在当前Shelll中执行一组命令 |
! | 执行命令历史记录中的命令 |
~ | 代表登录用户的宿主目录(自家目录) |