Bash 脚本入门:初学者应编写的简单自动化脚本示例
在上一篇文章中,我们学习了像 cd 和 ls 这样的 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!"
这个脚本会对 about、works、contact 这三个词进行循环处理,并为每个名字生成一个完整的 HTML 文件。从 << EOF 到 EOF 的部分被称为 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 脚本世界的第一步,我们学习了基本的语法和简单的自动化示例。
- 只需将一系列命令整理进一个文件,它就成了一个脚本。
- 使用变量和参数能让脚本更加灵活、易于重用。
- 使用 if 语句可以根据条件进行流程分支。
- 使用 for 循环可以将繁琐的重复性工作交给计算机。
脚本听起来可能很难,但说到底,它不过是“把平时手动输入的命令按顺序写下来”而已。首先,不妨思考一下,您平时经常做的那些工作,是否可以写成脚本呢?这小小的一步,或许就能把您从枯燥的工作中解放出来,让您能更专注于更具创造性的工作。
好了,学会了基本的写法后,您可能想学习更实用、更“优秀”的写法,以及避免新手常犯错误的技巧。在下一篇文章中,我们将解说这些最佳实践。