bash脚本与shell脚本相同吗?
我对Ubuntu很新。 我听到有人说“shell脚本”,“bash脚本”。
我想知道他们是一样的吗? 或者他们不同?
Bash( bash
)是许多可用(但最常用的)Unix shell之一。 Bash代表“ B ourne A gain SH ell”,是原始Bourne shell( sh
)的替代/改进。
Shell脚本在任何 shell中都是脚本,而Bash脚本是专门为Bash编写脚本的。 然而,在实践中,“shell脚本”和“bash脚本”通常可以互换使用,除非有问题的shell不是Bash。
编辑:实际上,Ubuntu中的默认脚本shell是破折号,而默认的交互式shell(如果你拉起终端你得到的)是Bash。 尽管如此,这两个词仍然大部分是可以互换的。
介绍
Shell脚本和Bash
脚本不是一回事,因为存在其他shell,例如sh
,可用于执行脚本; 打算由Bash
执行的脚本应标记为Bash
脚本。 这些术语通常可以互换使用,因为与sh
相比, Bash
具有扩展function,是许多发行版中最常用于执行用户脚本的术语。 但是,还有其他shell,如Korn (ksh)
, C shell (csh)
和Z shell (zsh)
,但我们不会在这里讨论sh
和bash
与Ubuntu最相关。 这里有一篇很棒的IBM文章详细介绍了Linux中shell的演变,并详细描述了shell架构以及shell的不同之处。
Shell Scripting
Sh
是Stephen Bourne开发的原始Unix shell; 但是基于Debian的系统和Ubuntu认为dash
是他们的sh
shell( sh
实际上是符号链接到dash
)。 在Debian和Ubuntu中,由于sh
的速度,它更常用于关键系统过程和启动时执行关键脚本; 有关更多详细信息,请参阅Ubuntu wiki 。 Bash
代表Bourne Again SHell,后来由Brian Fox开发并大大延伸了原来的sh
。 Fox和其他人的Bash
开发是GNU项目的重要组成部分。 有关更多信息,请参阅这篇关于Bash
历史的精彩讨论。
值得注意的是,在Ubuntu和其他发行版中使用的sh
和Bash
都符合POSIX
,这意味着他们订阅了许多关于如何在命令行管理器中执行命令的标准。 这是为了确保可以可靠地预测OS中使用的脚本的结果,并且shell的行为可以保持在那些POSIX
参数内,因为这对于开发人员来说尤为重要。 有关标准的更多信息,请参阅官方文档 。
shell脚本通常具有后缀.sh
,即使它们旨在作为bash
脚本执行,并且在脚本的顶部有#!/bin/bash
。 脚本是否被称为script.sh或my.script实际上并不重要,重要的是对解释器的调用是/bin/sh
还是/bin/bash
。 也可以使用sh
或bash
在命令行上调用Shell脚本。
但是, 重要的是要注意结果可能会有所不同,具体取决于调用哪个解释器,因为并非所有bash
命令都可以在sh
工作,而大多数sh
命令将在bash
工作。 通常,大多数用户都希望使用/bin/bash
作为脚本,以便他们可以利用扩展function集; 如果需要,可以使用/bin/sh
执行系统脚本。
Bash Shell脚本的资源
有时很难在线找到符合良好实践的有用资源,并提供可以创建有用脚本的建议。 在man bash
,一些最重要的资源是Greg的wiki , Bash黑客和Steve Parker最近关于Shell脚本的书,该书主要关注Bash
并由O’Reilly出版。 Bash初学者指南也进行了很好的介绍。
Ubuntu有多个shell可用,比如bash
, zsh
, ksh
, tcsh
和csh
。
因此,无论何时有人说贝壳 ,他都在谈论其中的一个。 但是,这些炮弹相互之间略有不同。 所以,当有人谈论bash
脚本时,他正在使用shell,但是当有人在谈论shell脚本时,他本身并不使用bash
。 但由于bash
常用于Ubuntu的脚本编写,他通常是。 而且,不同的壳在许多方面是相同的,因此通常无关紧要。
$ 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’的大超集。
在这里阅读更多:
- 维基百科上的bash
- 冲破维基百科