我为 UNIX 和 Windows 编写脚本已经快三年了。我一直对这两个术语感到困惑,有一段时间我认为 bash 脚本是 Windows cmd 脚本,而 shell 脚本是 UNIX 脚本,但我发现这是不正确的。那么 BASH 和 Shell 脚本这两个术语有什么区别呢?
“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
都是命令解释器。
同样,Windows、Linux和MacOSX是操作系统,或者奥迪、福特或雪佛兰是汽车:windows的cmd.exe、BASH, ZSH、CSH、TCSH、Korn Shell、Bourne Shell...只是不同种类的 shell。
一般来说,“外壳”是一个类比,旨在设计能够访问系统“核心”的用户界面。因此,在这种情况下,shell 是用于操作系统的文本界面(也称为 命令行界面 又名 CLI)。
现在,当您谈论“shell 脚本”时,它只是使用为用户界面开发的语言来自动执行该系统上的任务。现有一些面向图形的脚本(例如 Office 的宏),但大多数时候它是关于创建“批处理”文件(Dos/Windows 上的 .bat)或在 Unix 世界中称为“shell 脚本”的内容。
这里有一些维基百科文章,可以阅读更多相关内容:
Shell 脚本是可以由系统 shell 运行的任何脚本的总称。
现在编写一个接受命令并执行它们的程序——类似于 REPL/命令解释器。
sh
是一个外壳。 bash
、fish
、zsh
等也是如此
cmd
有时称为 Windows shell,但 windows shell
是 Windows UI 的正式名称。微软称其为 command interpreter
(更多名称混淆)。
cmd
和msdos
的脚本通常称为“批处理脚本”。
所以在 *nix 领域,通常是:“bash”执行“shell 脚本”。在 Windows 环境中:“cmd”(dos 提示符)执行“批处理脚本”。
根据维基百科:
shell 脚本是一种设计为由 Unix 运行的计算机程序 shell,一个命令行解释器。[1] shell的各种方言 脚本被认为是脚本语言。
来源:https://en.wikipedia.org/wiki/Shell_script
Bash 是一个命令处理器,通常在文本窗口中运行, 用户键入导致操作的命令的位置。 Bash 也可以读取 来自称为脚本的文件的命令。
换句话说,bash只是一个shell(流行的一种),而shell脚本是可以被shell解释的脚本。以下是满足您好奇心的 shell 列表:https://en.wikipedia.org/wiki/Unix_shell#Shell_categories