Bash 脚本#

  • 本节作者: 姚家园(作者)、田冬冬(作者)

  • 最近更新日期: 2023-02-27

  • 预计阅读时间: 15 分钟


Bash 简介#

Bash(全称 Bourne-Again SHell)是 GNU 开发的一个 Shell。 Bash 是目前绝大多数 Linux 发行版的默认 Shell。

打开终端,使用如下命令可以查看本机的 Bash 版本:

$ bash --version
GNU bash,version 5.0.3(1)-release (x86_64-pc-linux-gnu)

这一节中,我们不介绍具体的 Bash 语法,而是介绍如何编写和执行 Bash 脚本。 Linux 入门 一节中已经简要介绍了 Bash 语法, 本节的最后也列出了一些 Bash 学习资源,读者可根据需要自行学习。

Bash 脚本#

按照 Bash 语法规则编写的含有一系列指令的文本文件即称之为 Bash 脚本。 Bash 脚本一般以 .sh 作为后缀。

打开文本编辑器,新建一个文本文件,在文件中编写如下内容,并将其保存成名为 hello-world.sh 的文件,则得到一个简单的 Bash 脚本。

#!/usr/bin/env bash
#
# 输出 Hello world!
#

# 使用 echo 命令输出 Hello world
echo Hello world!  # 这也是注释

# 每一句指令以换行或分号隔开
echo Hello; echo world!

# 有些命令比较长,写成多行会有利于阅读和编辑
# 每行结尾加上反斜杠,Bash 会将下一行跟当前行一起解释
echo Hello world! \
This is seismo-learn.

Bash 脚本的第一行通常用于指定脚本解释器。这一行以 Shebang 字符 #! 开头,故而 也称之为 Shebang 行。Shebang 行不是必须的,但是建议加上这行。

Shebang 字符后紧跟着脚本解释器的路径。/usr/bin/env bash 可以在环境变量 PATH 指定的目录中自动寻找 Bash 解释器并返回其路径。

Note

你可能也会见到 Shebang 行的另一种写法 #!/bin/bash。 Bash 解释器一般位于 /bin 目录下,因而这种写法也是可行的。 但某些特殊的 Linux 系统的 Bash 解释器可能不在 /bin 目录下,使得脚本 在这些特殊的系统上无法正常运行,因而不推荐使用这种写法。 而 env 命令总在 /usr/bin 目录下,所以 #!/usr/bin/env bash 这种写法总可以正确找到 Bash 解释器。

Shebang 行之后的所有行都是 Bash 脚本的实际代码,其中 # 表示注释,可以放在行首, 也可以放在行尾。所有注释都会被 Bash 解释器自动忽略。

运行 Bash 脚本#

在终端中,可以直接用 bash scriptname.sh 的形式运行 Bash 脚本:

$ bash hello-world.sh

当脚本中已经显式地指定了 Bash 解释器(即存在 Shebang 行)时,可以使用 chmod 命令给脚本添加可执行权限:

$ chmod +x hello-world.sh

此时可以直接执行 Bash 脚本:

$ ./hello-world.sh

执行结果为:

Hello world!
Hello
world!
Hello world! This is seismo-learn.

拥有 Shebang 行和可执行权限的脚本,在调用时还需要指定脚本的路径, 如 ./hello-world.sh 代表该脚本位于当前目录。如果将脚本放在环境变量 PATH 指定的目录中,就不需要指定路径了,因为 Bash 会自动到这些目录中寻找是否存在同名的 可执行文件。可以参考环境变量一节 设置环境变量 PATH

扩展阅读#