会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 服务器 > 从 Bash 和 Korn 到 C shell:评估 Linux 中的 sh

从 Bash 和 Korn 到 C shell:评估 Linux 中的 sh

时间:2012-02-27 10:00:10   作者:   来源:   点击:

Tenex C shell

C shell 是 Bill Joy 1978 年在加州大学伯克利分校攻读研究生期间为 Berkeley SoftwareDistribution (BSD) UNIX 系统开发的。5 年后,该 shell 引入了来自 Tenex 系统(在 DEC PDP 系统上很流行)的功能。Tenex 引入了文件名和命令完成功能,以及命令行编辑功能。Tenex C shell (tcsh) 仍然向后兼容 csh,但改进了它的整体交互式功能。tcsh 是 Ken Greer 在 Carnegie Mellon University 开发的。

该 C shell 的一个重要的设计目标是创建一种类似 C 语言的脚本语言。这是一个有用的目标,因为 C 语言是所使用的主要语言(此外,该操作系统也是主要使用 C 语言开发的)。

Bill Joy 在 C shell 中引用的一项有用功能是命令历史。此功能维护以前执行的命令的历史,允许用户检查并轻松选择之前的命令来执行。例如,键入命令 history 将显示以前执行的命令。可使用向上和向下箭头来选择命令,或者可以使用 !! 执行前一个命令。也可以引用以前的命令的参数,例如 !* 引用前一个命令的所有参数,其中 !$ 引用前一个命令的最后一个参数。

看一下 tcsh 脚本的一个简单示例(清单 1)。这段脚本获取一个参数(一个目录名称),输出该目录中的所有可执行文件以及找到的文件数量。我将在每个示例中重用此脚本设计来演示区别。

tcsh 脚本可分解为 3 个基本部分。首先,请注意,我使用了 shebang 或 hashbang 符号来将此文件声明为可由定义的 shell 可执行文件(在本例中为 tcsh 二进制文件)解释。这允许我以常规可执行文件的形式执行该文件,而不在它之前添加解释器二进制文件。它维护找到的可执行文件数量,所以我将此数量初始化为 0。

清单 1. 用 tcsh 编写的查找所有可执行文件的脚本

#!/bin/tcsh

# find all executables

set count=0

# Test arguments

if ($#argv != 1) then

echo "Usage is $0

"

exit 1

endif

# Ensure argument is a directory

if (! -d $1) then

echo "$1 is not a directory."

exit 1

endif

# Iterate the directory, emit executable files

foreach filename ($1/*)

if (-x $filename) then

echo $filename

@ count = $count + 1

endif

end

echo

echo "$count executable files found."

exit 0

第一部分测试用户传递的参数。#argv 变量表示传入的参数数量(不包括命令名称本身)。您可指定这些参数的索引来访问它们:例如,#1 表示第一个参数(它是 argv[1] 的简写)。该脚本需要一个参数;如果它未找到该参数,则输出一条错误消息,使用 $0 表示在控制台输入的命令名称(argv[0])。

第二部分确保传入的参数是一个目录。如果该参数是一个目录,-d 操作符返回 True。但请注意,我首先指定了一个 ! 符号,这表示无效。这样,表达式可表明,如果参数不是一个目录,则输出一条错误消息。

最后一部分迭代目录中的文件,以测试它们是否可执行文件。我使用方便的 foreach 迭代器,它循环括号(在本例中为该目录)中的每一项,然后在循环中测试每一项。这一步使用 -x 操作符测试文件是否为可执行文件,如果是,则输出该文件并将数量加一。在脚本的末尾,我输出可执行文件的数量。

Korn shell

Korn shell (ksh) 由 David Korn 设计,是在与 Tenex C shell 相同的时期引入的。Korn shell 的一项最有趣的功能是,它除了向后兼容原始的 Bourne shell,还可用作脚本语言。

Korn shell 在 2000 年以开源形式发布(依据 Common Public License)以前一直是专用的软件。除了提供与 Bourne shell 强大的向后兼容性,Korn shell 还包含其他 shell 的功能(比如 csh 的历史功能)。该 shell 还提供了可在现代脚本语言(比如 Ruby 和 Python)中找到的一些更加高级的功能 — 例如,关联数组和浮点算法。Korn shell 可用于多种操作系统,包括 IBM® AIX® 和 HP-UX,致力于支持 Portable Operating System Interface for UNIX (POSIX) shell 语言标准。

Korn shell 是 Bourne shell 的衍生物,因此看上去更像 Bourne shell 和 Bash 而不是 C shell。让我们看一个查找可执行文件的 Korn shell 示例(清单 2)。

清单 2. 用 ksh 编写的查找所有可执行文件的脚本

分享到:

阅读此篇文章的网友还阅读了:

无相关信息

网友评论

推荐服务器

热门服务器