🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Bash 脚本入门:初学者应编写的简单自动化脚本示例

在上一篇文章中,我们学习了像 cdls 这样的 Bash 基本“单词”(命令)。虽然逐一输入命令已经很方便,但 Bash 的真正力量在于将这些单词组合成“句子”或“故事”,让计算机自动为我们工作。这就是 Bash 脚本

您是否也遇到过这些枯燥的重复性工作?“每天都用相同的文件夹结构准备项目”、“批量调整多张图片的尺寸”、“定期备份文件”……只要学会 Bash 脚本,这些工作都能像施了魔法一样瞬间完成。

本文面向对命令操作有了一些了解的初学者,将从 Bash 脚本的基本写法,到变量、条件分支(if 语句)、循环(for 语句)等编程入门知识,结合可直接复制粘贴运行的简单自动化脚本示例进行解说。就像编写菜谱一样,让我们来创造属于您自己的便捷自动化工具吧!


1. 你的第一个 Bash 脚本 - 自动化的第一步

Bash 脚本其实就是一个简单的文本文件,里面按顺序写着您想执行的一系列命令。创建它不需要任何特殊工具。我们马上来创建一个简单的脚本并运行它吧。

步骤 1: 创建脚本文件

首先,创建一个名为 hello_script.sh 的文本文件,并写入以下内容。文件的扩展名通常为 .sh

#!/bin/bash

# 在屏幕上显示消息
echo "你好,欢迎来到 Bash 脚本的世界!"
echo "当前日期和时间如下:"
date

可以先把第一行的 #!/bin/bash 当作一句“咒语”。这行代码(称为 Shebang)是用来告诉系统“请用 Bash 来执行这个文件”的。


步骤 2: 赋予执行权限

刚创建的脚本文件还不能被系统识别为“可执行程序”。我们需要使用 chmod 命令来给文件赋予执行权限。

$ chmod +x hello_script.sh

步骤 3: 运行脚本

万事俱备!用以下命令来运行脚本吧。./ 的意思是“在当前目录下”。

$ ./hello_script.sh
你好,欢迎来到 Bash 脚本的世界!
当前日期和时间如下:
2025年 7月 6日 星期日 09时47分45秒 JST

您写的命令按顺序执行了。这就是 Bash 脚本的基础!


2. 变量与参数 - 制作灵活的脚本

如果脚本只能做一成不变的事情,那就太没意思了。下面我们用“变量”和“参数”来让脚本变得更灵活。

变量:存放数据的“箱子”

变量就像一个带名字的“箱子”,可以存放您喜欢的任何数据(字符串或数字)。我们用 变量名=值 的格式来定义它,使用时写作 $变量名

#!/bin/bash

# 将字符串存入名为 GREETING 的变量中
GREETING="欢迎,"
USER_NAME="Alice"

# 使用变量显示消息
echo "您好,$GREETING $USER_NAME!"

参数:从外部向脚本传递信息

每次运行脚本都要修改其内容太麻烦了。这时我们可以使用“参数”。这是一种在运行脚本时从外部传递信息的机制。脚本可以通过 $1$2 等按编号接收这些信息。

我们来创建一个名为 greet.sh 的脚本吧。

#!/bin/bash

# 将运行时传入的第1个参数存入 USER_NAME 变量
USER_NAME=$1

echo "你好,$USER_NAME!"

运行这个脚本时,在后面附上一个名字来执行。


$ ./greet.sh Bob
你好,Bob!

像这样使用参数,能极大地提高脚本的可重用性。


3. 使用 if 语句进行条件分支 - 根据情况改变处理

编程的基础“如果……就……”,在 Bash 脚本中也能轻松实现。我们需要用到 if 语句。

例如,我们来创建一个检查“指定文件是否存在”的脚本。

#!/bin/bash

FILE_NAME=$1

# 如果名为 $FILE_NAME 的“文件”存在
if [ -f "$FILE_NAME" ]; then
  echo "文件 '$FILE_NAME' 已找到。"
else
  echo "文件 '$FILE_NAME' 不存在。"
fi

[ -f "文件名" ] 就是用来检查“该文件是否存在?”的条件表达式。我们来运行一下这个脚本。


文件存在的情况:

$ touch sample.txt
$ ./check_file.sh sample.txt
文件 'sample.txt' 已找到。

文件不存在的情况:

$ ./check_file.sh another.txt
文件 'another.txt' 不存在。

4. 使用 for 循环处理重复性工作 - 将繁琐任务一网打尽

自动化的精髓在于“重复处理”。如果需要一遍又一遍地做类似的工作,不如交给计算机吧。这时 for 循环就非常方便了。

我们以创建一个能一次性生成多个 HTML 文件作为网站模板的脚本为例。

#!/bin/bash

# 对 about, works, contact 这几个名字进行循环处理
for page in about works contact
do
  # 使用 page 变量动态生成文件名和H1标签内容
  FILE_NAME="${page}.html"
  TITLE_TEXT=$(echo "$page" | sed 's/./\u&/') # 将首字母转为大写

  # 使用 Here Document 将完整的 HTML 写入文件
  cat << EOF > $FILE_NAME
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>$TITLE_TEXT Page</title>
  <style>
    body { font-family: sans-serif; line-height: 1.6; color: #333; }
    h1 { color: #0056b3; }
  </style>
</head>
<body>
  <h1>This is the $TITLE_TEXT page.</h1>
  <p>Content for the $page page goes here.</p>
</body>
</html>
EOF

  echo "Created ${FILE_NAME}."
done

echo "All pages created!"

这个脚本会对 aboutworkscontact 这三个词进行循环处理,并为每个名字生成一个完整的 HTML 文件。从 << EOFEOF 的部分被称为 Here Document,对于直接输出多行字符串非常方便。


让我们运行它:

$ ./create_pages.sh
Created about.html.
Created works.html.
Created contact.html.
All pages created!

我们来确认一下生成的文件内容:

$ cat about.html
<!DOCTYPE html>
<html lang="zh-CN">
...
  <h1>This is the About page.</h1>
...
</html>

太棒了!三个内容各不相同的 HTML 文件一瞬间就创建好了!


总结

这次,作为踏入 Bash 脚本世界的第一步,我们学习了基本的语法和简单的自动化示例。

脚本听起来可能很难,但说到底,它不过是“把平时手动输入的命令按顺序写下来”而已。首先,不妨思考一下,您平时经常做的那些工作,是否可以写成脚本呢?这小小的一步,或许就能把您从枯燥的工作中解放出来,让您能更专注于更具创造性的工作。

好了,学会了基本的写法后,您可能想学习更实用、更“优秀”的写法,以及避免新手常犯错误的技巧。在下一篇文章中,我们将解说这些最佳实践。

【珍藏版】Bash 必学的 5 种模式与避错技巧