简介
欢迎来到自动化的世界!
想象一下,你是一名厨师。你不必每次都凭记忆手工烹饪每道菜,而是把步骤写成一份食谱。厨房工作人员可以按照这份食谱一次又一次地完美制作菜肴,而不需要你监督每一个步骤。
在 Linux 中,脚本就是你的食谱。它是一个纯文本文件,其中包含 shell 可以按顺序读取和执行的命令。这是 Unix 和 Linux 系统中最早、最重要的自动化形式之一。
早在现代配置管理工具出现之前,管理员就需要一种轻量级的方式来自动执行重复任务,因此 shell 脚本逐渐流行起来。即使在今天,许多生产系统仍然依赖小型 shell 脚本来完成设置、维护和故障排查。
在这个入门实验中,你将编写自己的第一份食谱。你将完成以下任务:
- 起草:创建脚本文件。
- 编写:添加指令(命令)。
- 授权:赋予文件运行权限。
- 执行:运行新程序。
创建脚本文件
首先,我们需要一张空白纸来写食谱。在 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 是告诉系统应该由哪个程序处理该文件的标准方式。
保存并退出:
- 按
Ctrl + O保存。 - 按
Enter确认。 - 按
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 程序员。你已经成功创建、授权并执行了自己的第一个自动化脚本。
总结
做得好!你刚刚掌握了一项重要的超能力。
回顾一下你学到的「脚本编写流程」:
- 起草:使用
touch或编辑器创建文件。 - 编写代码:添加
#!/bin/bash头部和命令。 - 解锁:使用
chmod +x,让 Linux 允许脚本运行。 - 执行:使用
./scriptname.sh运行脚本。
这看似只是一个小步骤,但从 Web 服务器到超级计算机,所有大型自动化系统的设置都始于这样的简单脚本。



