bash 脚本和 shell 脚本一样吗?

bat*_*man 76 bash scripts

我对 Ubuntu 很陌生。我听到人们说“shell 脚本”、“bash 脚本”。

我想知道他们是一样的吗?或者他们不一样?

Hil*_*way 68

Bash ( bash) 是许多可用(但最常用)的 Unix shell 之一。击代表“ourne增益SH ELL”,和是原始的Bourne壳的替换/改进(sh)。

Shell 脚本是在任何shell 中编写脚本,而 Bash 脚本是专门为 Bash 编写的脚本。然而,在实践中,“shell 脚本”和“bash 脚本”经常互换使用,除非所讨论的 shell 不是 Bash。

编辑:实际上,Ubuntu 中的默认脚本 shell 是 dash,而默认的交互式 shell(如果你拉起终端,你会得到什么)是 Bash。尽管如此,这两个术语仍然可以互换。

  • @wjandrea `/bin/sh` 是 `/bin/dash` 的符号链接这一事实使默认的 *system* shell,但它不是默认的 *scripting* shell,即没有书面规则你绝对必须使用 `/bin /sh`。当一个人使用 `/bin/sh` 时,主要是出于可移植性的原因,当你希望你的脚本在多个类 Unix 操作系统平台上使用时,其中大多数都有 `/bin/sh` 作为符合 POSIX 的 Bourne 系列贝壳。 (2认同)

小智 35

介绍

Shell 脚本编写和Bash脚本编写不是一回事,因为存在其他sh可用于执行脚本的Shell ;打算由其执行BashBash脚本应标记为脚本。这些术语经常互换使用,因为Bash与 相比具有扩展的功能sh,是许多发行版中最常用于执行用户脚本的一个。不过,也有其他的壳,如Korn (ksh)C shell (csh)Z shell (zsh),但我们不会去到他们这里的讨论shbash最相关的Ubuntu Linux系统。一个伟大的IBM文章此处进入更多细节上的贝壳在Linux的发展,并介绍了好壳结构和壳之间的区别。

外壳脚本

Sh是由斯蒂芬·伯恩 (Stephen Bourne) 开发的原始 Unix shell;然而,基于 Debian 的系统和 Ubuntu 将dash其视为它们的sh外壳(sh实际上是符号链接到dash)。在 Debian 和 Ubuntu 中,由于 的速度sh,它更常用于关键系统程序和在启动时执行关键脚本;有关更多详细信息,请参阅Ubuntu wikiBash代表 Bourne Again SHell,后来由 Brian Fox 开发并大大扩展了原版sh。Fox 和其他人开发Bash的 GNU 项目是 GNU 项目的重要组成部分。见这个历史的大讨论Bash以获取更多信息。

需要注意的是这两个重要的是shBash,如Ubuntu和其他发行版使用的是POSIX兼容的,这意味着他们订阅了有关命令是如何在shell中执行一些标准。这是为了确保可以可靠地预测操作系统中使用的脚本的结果,并且可以将 shell 的行为保持在这些POSIX参数内,因为这对开发人员尤其重要。有关标准的更多信息,请参阅官方文档

shell 脚本通常带有后缀.sh,即使它们旨在作为bash脚本执行,并且#!/bin/bash位于脚本的顶部。实际上,脚本被称为script.sh还是my.script并不重要,重要的是对解释器的调用是/bin/sh/bin/bash。也可以在命令行上使用sh或调用 Shell 脚本bash

然而,重要的是,结果可能会因该解释是不同的叫法,因为不是所有的注意bash命令将工作中sh,而大多数sh的命令将工作中bash。通常,大多数用户都希望将/bin/bash其用于他们的脚本,以便他们可以利用扩展的功能集;/bin/sh如果需要,可以执行系统脚本。

Bash Shell 脚本资源

有时很难在网上找到有用的资源,这些资源遵循良好的实践,并提供建议以允许您创建有用的脚本。之后man bash,一些最重要的资源是 Greg 的wikiBash 黑客和 Steve Parker 最近出版的关于 Shell 脚本的书,主要关注BashO'Reilly 并由 O'Reilly 出版。Bash 初学者指南也进行了很好的介绍。

  • 这个答案实际上优于我的(已接受的答案),我的才比这个早一个星期。 (6认同)