Skip to main content

Linux 中有哪些不同类型的 Shell?

作者 ninad

Shell 是所有 Linux 用户会话的重要组成部分。Linux 给我们提供了几种不同类型的 shell 来完成任务,每个 shell 都有独特的属性。因此,在很多情况下,某个 shell 能够比其他的 shell 更好地满足特定需求。 因此我们必须了解 Linux 中不同类型的 shell。在本教程中,我们将讨论什么是 shell 以及它为什么如此重要。 此外,我们将探讨 Linux 中 shell 的不同类型,以了解它们的功能和特性。

什么是 shell,为什么我们需要它?

每当用户登录系统或打开一个控制台窗口时,内核就会运行一个新的 shell 实例。内核是任何操作系统的核心,它负责控制管理和进程执行,并确保系统资源的正确利用。 Shell 是一个充当用户和内核之间接口的程序。它让用户可以向内核发出命令,并从内核那里得到回应。通过 shell,我们可以在内核上执行程序和工具。因此,shell 本质上是一个用来在我们的系统上执行其他程序的程序。 能够与内核互动的特性使得 shell 成为了一个强大的工具。如果没有与内核互动的能力,用户就不能访问他们机器的操作系统所提供的实用工具。 接下来让我们了解一下 Linux 环境下可用的主要的 shell。

Linux 中不同类型的 shell

上文说明了什么是内核,什么是 shell,以及为什么 shell 对 Linux 系统如此重要,接下来让我们继续学习一下不同类型的 shell。 每种 shell 都有一些特性,使它们用于某种用途时比其他 shell 更有效率。因此,让我们看一下 Linux 中不同类型的 shell 以及它们的属性和特点。

1. Bourne Shell (sh)

Bourne shell 由 Steve Bourne 在 AT&T 贝尔实验室开发,被认为是第一个UNIX shell。它被表示为 sh。由于紧凑和操作速度快,Bourne shell 广受欢迎。 以上特性使得它成为 Solaris 操作系统的默认外壳。它也被用作所有 Solaris 系统管理脚本的默认外壳。然而,Bourne shell有一些明显的缺点:

  • 它没有内置的处理逻辑和算术运算的功能。
  • 另外,与Linux中大多数的 shell 不同,Bourne shell不能回忆以前使用过的命令。
  • 它功能不全面, 无法提供适当的交互式使用。 Bourne shell的完整路径名称是/bin/sh和/sbin/sh。默认情况下,它对 root 用户使用 # 提示符,对非 root 用户使用 $ 提示符。

2. GNU Bourne-Again Shell (bash)

GNU Bourne-Again shell 更多被称为 Bash shell,它被设计成与Bourne shell兼容。Bash shell 融合了 Linux 中不同类型 shell 的有用功能,如 Korn shell 和 C shell。 与Bourne shell不同的是,它能够自动回忆以前使用过的命令,并可以使用方向键编辑它们。 GNU Bourne-Again shell的完整路径名称是/bin/bash。默认情况下,它对 root 用户使用的提示符是 bash-版本号#,对非 root 用户的提示符是 bash-版本号$

3. C Shell (csh)

C shell 是由 Bill Joy 在加利福尼亚大学创建的。它被表示为 csh。开发 C shell 是把有用的编程功能容纳进去,如对算术运算的内置支持和类似于 C 语言的语法。 此外,它还包含了 Linux 中不同类型的 shell(如Bourne shell)中所缺少的历史命令。C shell 的另一个显著功能是“别名”。 C shell的完整路径名称是/bin/csh。默认情况下,它对 root 用户的提示符是 主机名#,对非 root 用户的提示符是 主机名$

4. Korn Shell (ksh)

Korn shell 是由 David Korn 在 AT&T 贝尔实验室开发的,用于改进 Bourne shell。它被表示为 ksh。Korn shell 本质上是 Bourne shell 的一个超集。 除了支持 Bourne shell 所支持的一切外,Korn shell 还为用户提供了新的功能。它有着内置的对算术运算的支持,同时提供类似于 C shell 的交互功能。 Korn shell 运行为 Bourne shell 编写的脚本,同时提供类似于 C 语言的字符串、数组和函数运算。它还支持为 C shell 编写的脚本。此外,它比 Linux 中大多数不同类型的 shell(包括 C shell)要快。 Korn shell 的完整路径名称是/bin/ksh。默认情况下,它对 root 用户使用 # 提示符,对非 root 用户使用 $ 提示符。

5. Z Shell (zsh)

Z Shell 或 zsh 是 sh shell 的扩展,在自定义方面做了大量改进。如果你想要一个具有更多功能的现代 shell,zsh shell就是你要找的。 Z shell 有以下亮点:

  • 根据给定的条件生成文件名
  • 支持插件和主题
  • 索引内置函数
  • 自动补全命令
  • 以及更多…… 让我们总结一下本教程中讨论的 Linux 中不同的 shell,如下表所示:
Shell完整路径名root 用户提示符非 root 用户提示符
Bourne shell (sh)/bin/sh 和 /sbin/sh#$
GNU Bourne-Again shell (bash)/bin/bashbash-版本号#bash-版本号$
C shell (csh)/bin/csh#%
Korn shell (ksh)/bin/ksh#$
Z Shell (zsh)/bin/zsh<主机名>#<主机名>%

结语

Shell 是 Linux 用户可用的最强大的工具之一(或许也可以去掉“之一”)。要是没有 shell,就没有人能够利用安装在他们系统上的内核所提供的特性和功能。 虽然我们只介绍了 Linux 中最常用的 shell 类型,但还有许多其他的 shell 类型值得我们去探索。 希望这个教程能够帮助你理解 shell 的概念,以及 Linux 中不同类型 shell 的特性。