问题描述
我对Ubuntu非常陌生。我听到有人说”shell scripting”,”bash scripting”。
我不知道他们是不是一样?还是他们不同?
最佳回答
Bash(bash
)是许多可用的(至今仍是最常用的)Unix shell之一。 Bash代表“ Bourne Again SHell”,并且是原始Bourne shell (sh
)的替代/改进。
Shell脚本是在任何Shell中编写脚本,而Bash脚本是专门为Bash编写脚本。但是,实际上,除非有问题的 shell 不是Bash,否则”shell script”和”bash script”通常可以互换使用。
编辑:实际上,Ubuntu中的默认脚本 shell 是破折号,而默认的交互式 shell (如果拉起终端会得到什么)是Bash。尽管如此,这两个术语仍然大部分可以互换。
次佳回答
介绍
Shell脚本和Bash
脚本不是一回事,因为存在其他可用于执行脚本的 shell ,例如sh
。打算由Bash
执行的脚本应标记为Bash
脚本。由于Bash
与sh
相比具有扩展功能,是在许多发行版中最常用于执行用户脚本的术语,因此这些术语可以互换使用。但是,还有其他 shell 程序,例如Korn (ksh)
,C shell (csh)
和Z shell (zsh)
,但我们这里不再赘述,因为sh
和bash
与Ubuntu最相关。 IBM的一篇很棒的文章here进一步详细介绍了Linux中shell的发展,并很好地描述了shell架构以及shell的不同之处。
Shell脚本
Sh
是Stephen Bourne开发的原始Unix shell。但是,基于Debian的系统和Ubuntu将dash
视为其sh
shell 程序(sh
实际上是与dash
链接的)。在Debian和Ubuntu中,由于sh
的速度,它更经常用于关键的系统过程以及启动时执行关键脚本。有关更多详细信息,请参见the Ubuntu wiki。 Bash
代表Bourne Again SHell,后来由Brian Fox开发,并大大扩展了原始的sh
。 Fox和其他人对Bash
的开发是GNU项目的重要组成部分。有关更多信息,请参阅this关于Bash
历史的精彩讨论。
重要的是要注意,在Ubuntu和其他发行版中使用的sh
和Bash
都符合POSIX
的要求,这意味着它们遵守有关Shell中命令执行方式的许多标准。这是为了确保可以可靠地预测OS中使用的脚本的结果,并且可以将Shell的行为保留在这些POSIX
参数内,因为这对于开发人员而言尤其重要。有关标准的更多信息,请参见the official documentation。
尽管shell脚本旨在作为bash
脚本执行,但通常它们的后缀为.sh
,并且在脚本顶部具有#!/bin/bash
。将该脚本称为script.sh还是my.script实际上并不重要,重要的是对解释器的调用是/bin/sh
还是/bin/bash
。也可以使用sh
或bash
在命令行上调用Shell脚本。
但是,需要注意的是,根据调用哪个解释器,结果可能有所不同,因为并非所有bash
命令都可以在sh
中使用,而大多数sh
命令都可以在bash
中使用。通常,大多数用户都希望将/bin/bash
用于其脚本,以便他们可以利用扩展功能集。如果需要,可以使用/bin/sh
执行系统脚本。
Bash Shell脚本编写资源
有时很难在网上找到遵循良好做法并提供建议的有用资源,以使您可以创建有用的脚本。在man bash
之后,一些最重要的资源是Greg的wiki,Bash hackers和Steve Parker最近关于Shell脚本的书,该书主要关注Bash
,由O’Reilly出版。 Bash beginner’s Guide也进行了很好的介绍。
第三种回答
Ubuntu有多个可用的Shell,例如bash
,zsh
,ksh
,tcsh
和csh
。
因此,只要有人说壳,他就在谈论其中之一。但是,这些 shell 彼此有点不同。因此,当有人谈论bash
脚本时,他正在使用shell,但是当有人谈论shell脚本时,他本身并不是在使用bash
。但是由于bash
通常用于Ubuntu脚本中,所以通常是这样。而且,不同的 shell 在很多方面都是相同的,因此通常无关紧要。