创建你的第一个脚本

LinuxBeginner
立即练习

简介

欢迎来到自动化的世界!

想象一下,你是一名厨师。你不必每次都凭记忆手工烹饪每道菜,而是把步骤写成一份食谱。厨房工作人员可以按照这份食谱一次又一次地完美制作菜肴,而不需要你监督每一个步骤。

在 Linux 中,脚本就是你的食谱。它是一个纯文本文件,其中包含 shell 可以按顺序读取和执行的命令。这是 Unix 和 Linux 系统中最早、最重要的自动化形式之一。

早在现代配置管理工具出现之前,管理员就需要一种轻量级的方式来自动执行重复任务,因此 shell 脚本逐渐流行起来。即使在今天,许多生产系统仍然依赖小型 shell 脚本来完成设置、维护和故障排查。

在这个入门实验中,你将编写自己的第一份食谱。你将完成以下任务:

  1. 起草:创建脚本文件。
  2. 编写:添加指令(命令)。
  3. 授权:赋予文件运行权限。
  4. 执行:运行新程序。

创建脚本文件

首先,我们需要一张空白纸来写食谱。在 Linux 中,脚本就是一个纯文本文件。

虽然 Linux 不强制要求使用文件扩展名,但使用 .sh 为 shell 脚本命名是一个好习惯。这样便于人们快速识别文件的用途,尽管 Linux 更关注文件内容和权限,而不是文件名扩展名。

这是 Unix 中一个重要的理念:通常,文件的身份更多由其内容和权限决定,而不是由文件名决定。脚本不是通过图形化向导创建出的特殊文件类型,而只是程序(例如 Bash)可以逐行读取的文本。

在项目目录中创建一个名为 hello.sh 的空文件。

确认你位于正确的位置:

pwd

现在使用 touch 命令。这个命令相当于在电脑上拿起一张空白纸:

touch hello.sh

检查当前目录,确认文件已经创建:

ls

你应该会看到 hello.sh,等待你向其中写入指令。

编写脚本内容

现在需要写入真正的食谱内容。不过首先,我们需要添加一个特殊的头部信息。

把脚本想象成一封信。你需要把信写给正确的人。在 Linux 中,脚本的第一行会告诉系统应该由谁来读取它。这一行称为 Shebang(#!)。

我们希望由 Bash shell 读取脚本,因此要将它指定为 /bin/bash。同时,我们还会添加一条简单的指令:echo。这个命令会告诉计算机「把下面的内容显示出来」。

Shebang 是 Unix 中历史悠久且非常实用的约定。当你把脚本作为程序运行时,操作系统会读取第一行,并据此决定使用哪个解释器处理该文件。解释器是一种读取指令并执行指令的程序,而不是直接运行预编译的二进制文件。

使用 nano 编辑器打开空文件:

nano hello.sh

现在严格按照下面的内容输入这两行:

#!/bin/bash
echo "Hello LabEx"

下面解释这两行:

  • #!/bin/bash:这是「地址标签」。它告诉 Linux:「请把这些指令交给 Bash 程序处理。」
  • echo "Hello LabEx":这是「指令」。它告诉 Bash 在屏幕上输出 Hello LabEx。

如果你明确使用 bash hello.sh 运行脚本,即使没有 shebang,脚本在某些情况下仍然可以正常工作,因为你已经手动选择了解释器。但是,当你使用 ./hello.sh 运行脚本时,shebang 是告诉系统应该由哪个程序处理该文件的标准方式。

保存并退出:

  1. 按 Ctrl + O 保存。
  2. 按 Enter 确认。
  3. 按 Ctrl + X 退出。

使用 cat 读取文件,检查刚才输入的内容:

cat hello.sh

使脚本可执行

你已经写好了食谱,但现在它还只是一张纸。Linux 有严格的安全策略:除非你明确授予文本文件运行权限,否则它不能作为程序运行。这样可以避免你不小心把购物清单当成代码执行!

我们需要打开允许执行的「钥匙」。用于更改权限(模式)的命令是 chmod。要添加的权限是 +x(加上执行权限)。

这个操作完全不会改变文件内容,而是修改文件的模式位。模式位属于 Linux 为每个文件保存的元数据。换句话说,chmod +x 并没有让脚本「更像脚本」,而只是告诉系统允许将该文件作为程序执行。

为脚本授予执行权限:

chmod +x hello.sh

再次查看文件的标识信息,确认操作是否成功:

ls -l hello.sh

查看左侧的权限信息。你应该会看到一个 x,例如 -rwxr-xr-x。文件名还可能显示为绿色,这是终端在提示你:「可以运行这个文件。」

运行脚本

现在到了见证结果的时刻。开始执行这份食谱吧!

要运行当前目录中就在你面前的脚本,必须明确指定它的位置。不能只输入 hello.sh,而必须输入 ./hello.sh。

  • . 表示「当前目录」。
  • / 是路径分隔符。

因此,./hello.sh 的字面意思就是:「运行当前目录中名为 hello.sh 的文件。」

这会让许多初学者感到意外。原因是,当你只输入命令名称时,shell 通常只会搜索 PATH 变量列出的目录。出于安全考虑,当前目录通常不会被自动搜索。这就是 ./ 的作用:你提供了一个明确的路径,而不是让 shell 到其他位置搜索命令。

运行脚本:

./hello.sh

如果一切正常,计算机应该会输出:

Hello LabEx

恭喜你!你不再只是 Linux 用户,而已经成为一名 Linux 程序员。你已经成功创建、授权并执行了自己的第一个自动化脚本。

总结

做得好!你刚刚掌握了一项重要的超能力。

回顾一下你学到的「脚本编写流程」:

  1. 起草:使用 touch 或编辑器创建文件。
  2. 编写代码:添加 #!/bin/bash 头部和命令。
  3. 解锁:使用 chmod +x,让 Linux 允许脚本运行。
  4. 执行:使用 ./scriptname.sh 运行脚本。

这看似只是一个小步骤,但从 Web 服务器到超级计算机,所有大型自动化系统的设置都始于这样的简单脚本。