Linux 使用Bash和Shell脚本有什么区别

Linux 使用Bash和Shell脚本有什么区别,linux,bash,shell,cmd,scripting,Linux,Bash,Shell,Cmd,Scripting,我已经为UNIX和Windows编写脚本将近3年了。我一直对这两个术语感到困惑,有一段时间我认为bash脚本是windows cmd脚本,shell脚本是UNIX脚本,但我知道这是不正确的。那么这两个术语之间的区别是什么:BASH和Shell脚本 就像Windows、Linux和MacOSX是操作系统一样,奥迪、福特或雪佛兰是汽车:Windows的cmd.exe、BASH、ZSH、CSH、TCSH、Korn Shell、Bourne Shell……只是不同种类的外壳 一般来说,“shell”是一

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

就像Windows、Linux和MacOSX是操作系统一样,奥迪、福特或雪佛兰是汽车:Windows的cmd.exe、BASH、ZSH、CSH、TCSH、Korn Shell、Bourne Shell……只是不同种类的外壳

一般来说,“shell”是一个类比,用于设计用户界面,以访问系统的“核心”。因此,在本例中,shell是用于操作系统的文本界面(也称为命令行界面,又称CLI)

现在,当您谈到“shell脚本”时,它只是使用为用户界面开发的语言来自动化该系统上的任务。目前有一些面向图形的脚本(如Office的宏),但大多数情况下都是关于创建“批处理”文件(.bat在Dos/Windows上)或unix世界中所谓的“shell脚本”

以下是一些维基百科文章,可以阅读更多关于它的内容:

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

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

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

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

特别是,它可能是当今最常用的外壳。它实现了与Bourne shell相同的功能,以及许多扩展

Bourne shell脚本通常以以下行开头:

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

#!/bin/bash
并且可能取决于Bash实现的特性,而不是bourneshell实现的特性

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

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


Bash与Windows
cmd
脚本几乎没有什么关系,只是Bash和
cmd.exe都是命令解释器。

根据维基百科:

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

资料来源:

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


换句话说,bash只是一个shell(流行的shell),shell脚本是一个可以由shell解释的脚本。下面是一个shell列表供您参考:

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

现在,shell是一个接受命令并执行它们的程序——类似于REPL/command解释器
sh
是一个shell。
bash
fish
zsh
等也是如此

cmd
有时被称为Windows shell,但
Windows shell
是Windows UI的正式名称。微软称之为
命令解释器
(更多名称混淆)

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


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

一个“shell脚本”是一个描述。。嗯,可以解释/运行的“一些脚本”。通常是贝壳。是shell的一个特定实现,是“sh”派生的,具有许多特性。从技术上讲,“shell脚本”可以用于不同类型的shell;但这种情况通常很少见;或者用诸如“批处理文件”(对于cmd.exe“shell脚本”)或“powershell”之类的指定来表示。因此,基本上,有不同类型的shell,bash是shell的一种类型?是的。这是一个相当好的总结。你可能把windows cmd脚本的“bash”和“batch”混淆了。@glennjackman没有。我知道批处理是在windows上运行的脚本,它们有扩展名.bat。我只是想问一下bash和shell之间的区别:)shell脚本是您用bash可以解释的语言编写的脚本→ 不,这是你用SHELL可以解释的语言写的,Bash只是SHELL中的一个。谢谢你的评论!我将对其进行编辑以使其更合适。如果有人能解释为什么
-1
?我相信我的描述非常准确。那么“cmd”也被认为是shell类型吗?我们可以说“批处理”脚本是“windows shell脚本”吗?@MohamedKhaled:是的,
cmd
可以被视为shell。“shell”一词通常用于Unix shell,但PowerShell是特定于Windows的。
#!/bin/bash