CSH 入门基础 4 番外篇 -- bash 和 shell 的区别 及shell 种类介绍

文章目录

    • shell 种类介绍
    • Shell 与 bash 差异
    • /bin/sh 历史背景
    • /bin/sh 与 /bin/bash 差异

上篇文章: CSH 入门基础 3 – csh(C Shell)“onintr” 命令使用介绍

shell 种类介绍

在Linux中,有几种常见的Shell,下面是一些简单的介绍:

  • Bash(Bourne Again SHell):Bash是许多Linux发行版的默认Shell,它是Bourne Shell(sh)的扩展版本,增加了许多有用的特性,比如命令行历史记录,命令行编辑和命令别名等。

  • C Shell(csh):C Shell的语法类似于C语言,提供了许多对程序员来说友好的特性,比如别名和作业控制。C Shell还有一个增强版叫做Tcsh。

  • Korn Shell(ksh):Korn Shell是Bourne Shell的扩展版,它结合了Bourne Shell和C Shell的一些特性,并增加了一些自己的特性。Korn Shell在商业环境中使用较广,特别是在IBM的系统中。

  • Z Shell(zsh):Z Shell是一种扩展的Bourne Shell,它包含了很多强大的特性,比如命令行提示符的定制,拼写校正和编程特性等。

  • Fish(Friendly Interactive SHell):Fish是一种相对较新的Shell,它的目标是提供一种友好和交互式的用户体验。Fish有很多有用的特性,比如自动建议,彩色提示符和Web配置界面等。

每种Shell都有其自己的特性和优点,你可以根据你的需求和喜好选择使用哪种Shell。

Shell 与 bash 差异

Shell 和 Bash 在 Linux 中都是命令行界面,都可以执行用户输入的命令。然而,他们之间是有区别的:

  • Shell 是一个通用术语,它描述了任何一个为用户提供与操作系统交互的接口的程序。Shell 可以有图形用户界面(GUI),也可以有字符界面(CLI)。在 Unix 或类 Unix 系统(如 Linux)中,我们通常提到 Shell,是指 Shell 命令行解释器。

  • Bash(Bourne Again SHell) 是 Shell 的一种。它是由 GNU 项目创建的一个 Shell 程序,是 Bourne Shell(sh)的替代品和扩展,提供了许多改进和新特性。例如,命令行编辑,命令历史记录,命令别名等。

在大多数 Linux 发行版中,当我们打开终端或在命令行界面中登录时,默认的 Shell 就是 Bash。当然,也可以根据个人喜好选择使用其他的 Shell,比如 Zsh,Fish,Csh 等。

/bin/sh 历史背景

GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。

Ubuntu 继承了 Debian,所以从Ubuntu 6.10 开始默认是 Dash Shell。

sam@ubuntu:~$ ls -l /bin/sh /bin/bash
-rwxr-xr-x 1 root root 1396520  17  2022 /bin/bash
lrwxrwxrwx 1 root root       4 1010  2022 /bin/sh -> dash

应该说, /bin/sh/bin/bash 虽然大体上没什么区别, 但仍存在不同的标准。
标记为 “#!/bin/sh” 的脚本不应使用任何 POSIX 没有规定的特性 , 如 let 等命令, 但 “#!/bin/bash” 可以。 Debian 曾经采用 /bin/bash 更改 /bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过 shell 脚本测试存在运行问题。因为原先在 bash shell 下可以运行的 shell script (shell 脚本),在 /bin/sh 下还是会出现一些意想不到的问题,不是100%的兼用。

/bin/sh 与 /bin/bash 差异

/bin/bash/bin/sh 在很多情况下都可以互换使用,但它们确实有一些关键的不同:

  • 兼容性:/bin/sh 是一个更通用的 shell,旨在提供与所有 Unix-like 系统的 shell 脚本兼容。因此,它可能没有包含某些特定 shell(如 bash)的特定功能。

  • 功能:/bin/bash 是 Bourne Again Shell 的路径,它包含了许多高级功能,例如命令行编辑,命令历史和命令别名等。这些功能可能在 /bin/sh 中并不可用,尤其是当 /bin/sh 链接到不同于 bash 的 shell(如 dash)时。

  • 性能:在某些 Linux 发行版中,例如 Ubuntu,/bin/sh 实际上是一个符号链接,指向 Dash(Debian Almquist Shell)。Dash 是一个比 Bash 更小,更轻便也更快的 shell,主要用于执行系统脚本。

在编写 shell 脚本时,如果你需要使用 Bash 的高级功能,或者你的脚本需要在具有 Bash 的系统上运行,那么你应该使用 /bin/bash。如果你正在编写通用的、跨平台的脚本,并且不需要任何特定于 bash 的功能,你应该使用 /bin/sh。

上篇文章: CSH 入门基础 3 – csh(C Shell)“onintr” 命令使用介绍

你可能感兴趣的:(#,Shell,系列文章,bash,shell,种类,shell,与,bash,差异,/bin/sh,/bin/bash,sh与bash差异)