bash 脚本与 shell 脚本相同吗?

bash 脚本与 shell 脚本相同吗?

我对 Ubuntu 还很陌生。我听人们说“shell 脚本”、“bash 脚本”。

我想知道它们是一样的吗?还是不同的?

答案1

Bash ( bash) 是众多可用的(但最常用的)Unix shell之一。Bash 代表“奥讷A获得上海ell”,是原始 Bourne shell ( sh) 的替代/改进版本。

Shell 脚本是任何shell,而 Bash 脚本是专门为 Bash 编写的脚本。然而,在实践中,“shell 脚本”和“bash 脚本”经常互换使用,除非所讨论的 shell 不是 Bash。

编辑:实际上,Ubuntu 中的默认脚本 shell 是 dash,而默认交互式 shell(打开终端后得到的)是 Bash。尽管如此,这两个术语仍然可以互换。

答案2

介绍

Shell 脚本和Bash脚本编写不是一回事,因为存在其他 shell,例如sh可用于执行脚本的 shell;旨在由执行的脚本Bash应标记为Bash脚本。这两个术语经常互换使用,因为Bash与相比,它具有扩展功能sh,是许多发行版中执行用户脚本最常用的 shell。但是,还有其他 shell,例如Korn (ksh)和,但我们不会在这里讨论它们,因为C shell (csh)和与Ubuntu 最相关的是。一篇很棒的 IBM 文章Z shell (zsh)shbash这里更详细地介绍了 Linux 中 shell 的演变,并很好地描述了 shell 的架构以及 shell 之间的区别。

Shell 脚本

Sh是 Stephen Bourne 开发的原始 Unix shell;然而基于 Debian 的系统和 Ubuntu 将其视为dashshshell(sh实际上是符号链接到的dash)。在 Debian 和 Ubuntu 中,由于 的速度很快sh,它更常用于关键系统程序和在启动时执行关键脚本;有关更多详细信息,请参阅Ubuntu 维基. Bash代表 Bourne Again SHell,后来由 Brian Fox 开发,并对原始 进行了很大的扩展sh。Fox 和其他人开发的Bash是 GNU 项目的重要组成部分。参见有关历史的精彩讨论,Bash以获取更多信息。

值得注意的是,Ubuntu 和其他发行版中使用的sh和都是兼容的,这意味着它们遵循许多有关如何在 Shell 中执行命令的标准。这是为了确保可以可靠地预测操作系统中使用的脚本的结果,并且 Shell 的行为可以保持在这些参数范围内,因为这对开发人员来说尤为重要。有关标准的更多信息,请参阅BashPOSIXPOSIX官方文档

.sh尽管 shell 脚本旨在作为脚本执行,但它们通常带有后缀,bash并且#!/bin/bash在脚本顶部有 。实际上,脚本是否被调用并不重要脚本或者我的脚本,重要的是对解释器的调用是/bin/sh还是/bin/bash。 Shell 脚本也可以在命令行上使用 或 来sh调用bash

然而,重要的需要注意的是,结果可能会因调用的解释器不同而不同,因为并非所有bash命令都能在 中工作sh,而大多数sh命令都能在 中工作bash。通常,大多数用户希望使用/bin/bash来执行他们的脚本,以便他们可以利用扩展的功能集;/bin/sh如果需要,可以使用 来执行系统脚本。

Bash Shell 脚本资源

有时很难在网上找到遵循良好实践并提供建议的有用资源,这些资源将帮助您创建有用的脚本。 之后man bash,一些最重要的资源是 Greg 的维基百科打击黑客以及 Steve Parker 最近出版的一本关于 Shell 脚本的书,该书主要关注Bash并由 O'Reilly 出版。Bash 初学者指南

答案3

Ubuntu 有多个可用的 shell ,例如bash、、和。zshkshtcshcsh

所以每当有人说,他正在谈论其中之一。但是,这些 shell 彼此略有不同。因此,当有人谈论bash脚本时,他正在使用 shell,但当有人谈论 shell 脚本时,他本身并没有使用bash。但正如bashUbuntu 脚本中常用的那样,他通常会这样做。此外,不同的 shell 在很多方面都是相同的,所以这通常无关紧要。

答案4

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr  3 08:58 /bin/bash*

这表明“sh”是“dash”的符号链接,并且 /bin/bash(Ubuntu 上的默认交互式 shell)是一个可执行文件,其大小几乎是 /bin/sh 的 9 倍。

事实上,'man sh'(1590 行)与'man bash'(5459 行)的比较表明,bash 是传统'sh'的超集。

更多详情请阅读:

相关内容