【问题标题】:What is the difference b/w Bash and Shell scriptBash和Shell脚本有什么区别
【发布时间】:2015-11-07 02:52:14
【问题描述】:

我已经为 UNIX 和 Windows 编写脚本将近 3 年了。我一直对这两个术语感到困惑,有一段时间我认为 bash 脚本是 windows cmd 脚本,而 shell 脚本是 UNIX 脚本,但我了解到这是不正确的。那么这两个术语有什么区别:BASH 和 Shell 脚本?

【问题讨论】:

  • “shell 脚本”是一个描述......好吧,可以由"a shell' 解释/运行的“某些脚本”。通常是'sh'-derived (Bourne-shell like) shell。 Bash 是 shell 的一个特定实现,是“sh”派生的,具有许多特性。从技术上讲,“shell 脚本”可以用于不同类型的 shell;但这种情况通常很少见;或由诸如“批处理文件”之类的指定表示 - 对于 cmd.exe “shell 脚本” - 或“powershell”。
  • 所以基本上,有不同类型的 shell,而 bash 是一种类型的 shell?
  • 是的。这是一个相当不错的总结。
  • 您可能将 Windows cmd 脚本的“bash”与“batch”混淆了。
  • @glennjackman 不。我知道批处理是在 Windows 上运行的脚本,它们的扩展名为 .bat。我只是在问 bash 和 shell 之间的区别 :)

标签: linux bash shell cmd scripting


【解决方案1】:

“Shell 脚本”是由shell 执行的脚本的通用术语。

“Bash 脚本”是一个更具体的术语;它指的是由一个特定的 shell 执行的脚本,Bash shell。

shell 是一个命令解释程序。它可以以交互方式使用(用户在提示符下键入命令,shell 执行它们),或作为脚本的解释器(将一系列命令写入文件)。

Bourne shell 是 UNIX 上较旧的 shell 之一(不是最古老的,但我们不必担心古老的历史)。其他几个 shell 已被实现为 Bourne shell 的替代品或扩展。

特别是,GNU Bash 可能是当今最常用的 shell。它实现了与 Bourne shell 相同的功能,外加一些扩展。

Bourne shell 脚本通常以 "Shebang" 行开头:

#!/bin/sh

Bash 脚本通常以指定 Bash shell 的 Shebang 开头:

#!/bin/bash

并且可能依赖于 Bash 实现的功能,但不依赖于 Bourne shell。

(在某些操作系统上,/bin/sh 可能与/bin/bash 是同一命令。)

并非所有 Unix shell 都基于 Bourne shell。特别是,csh 及其派生的 tcsh 在很大程度上与 Bourne 派生的 shell 不兼容。

Bash 与 Windows cmd 脚本关系不大,除了 Bash 和 cmd.exe 都是命令解释器。

【讨论】:

  • 那么“cmd”也被认为是shell类型吗?我们可以说“批处理”脚本是“Windows shell 脚本”吗?
  • @MohamedKhaled:是的,cmd 可以被认为是一个外壳。 “shell”一词通常用于 Unix shell,但 PowerShell 是特定于 Windows 的。
【解决方案2】:

Shell 脚本是可以由系统 shell 运行的任何脚本的通用名称。

现在壳一个接受命令并执行它们的程序 - 一种 REPL / 命令解释器。 sh 是一个外壳。 bash、fish、zsh 等也是如此。

cmd 有时称为 Windows shell,但windows shell 是 Windows UI 的正式名称。微软称它为command interpreter(更多名称混淆)。

cmd 和 msdos 的脚本通常称为“批处理脚本”。

所以在 *nix 领域它通常是:“bash”执行“shell 脚本”。而在 windows 中:“cmd”(dos 提示符)执行“批处理脚本”。

【讨论】:

    【解决方案3】:

    Windows、Linux 和 MacOSX 是操作系统或Audi的相同方式em>、福特或雪佛兰是汽车:windows的cmd.exe、BASH、ZSH、CSH、TCSH、Korn Shell、Bourne Shell…只是不同种类的shell。

    一般来说,“外壳”是一个类比,用于设计能够访问系统“核心”的用户界面。所以在这种情况下,shell 是用于操作系统的文本界面(也称为 命令行界面 aka CLI)。

    现在,当您谈论“shell 脚本”时,它只是使用为用户界面开发的语言来自动执行该系统上的任务。存在一些面向图形的脚本(如 Office 的宏),但大多数时候它是关于创建“批处理”文件(Dos/Windows 上的 .bat)或在 unix 世界中被称为“shell 脚本”的东西。

    这里有一些维基百科文章可以阅读更多相关信息:

    【讨论】:

    • 如果有人能解释为什么-1?我相信我的描述非常准确。
    【解决方案4】:

    根据维基百科:

    shell 脚本是一种计算机程序,旨在由 Unix 运行 shell,一个命令行解释器。[1]贝壳的各种方言 脚本被认为是脚本语言。

    来源:https://en.wikipedia.org/wiki/Shell_script

    Bash 是一个通常在文本窗口中运行的命令处理器, 用户键入导致动作的命令。 Bash 也可以阅读 来自文件的命令,称为脚本。

    换句话说,bash 只是一个 shell(一种流行的),而 shell script 是一个可以被 shell 解释的脚本。以下是您感兴趣的 shell 列表:https://en.wikipedia.org/wiki/Unix_shell#Shell_categories

    【讨论】:

    • shell 脚本是你用 bash 可以解释的语言编写的脚本 → 不,它是你用 SHELL语言编写的> 可以解释,Bash 只是其中一个 shell。
    • 感谢您的评论!我将对其进行编辑以使其更合适。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多