零基础也能学会:Linux Shell脚本编写实战案例详解
从零开始:你的第一个Shell脚本长什么样?
很多新手觉得Shell脚本很神秘,其实它就是把要在终端里手动敲的多个命令,提前写到一个文件里,让系统帮你自动执行。
Linux Shell脚本编写实战案例千千万,但核心思路都一样:明确任务→写好命令→保存运行。
动手之前,先确认你的环境:
- 一台安装了Linux系统的服务器或个人电脑(本文以Ubuntu 22.04为例)。
- 一个文本编辑器(推荐
nano或vim,也可以用本地的记事本写完再传上去)。 - 普通用户权限即可,只需要知道
sudo怎么用。
打开终端,试试输入 echo $SHELL,如果看到 /bin/bash 那就说明环境没问题。
案例一:自动备份目录,再也不怕误删文件
假设你每天都要备份 /var/www/html 这个网站目录。
手动复制又慢又容易出错,用Shell脚本就能自动化。
第一步:创建脚本文件
nano backup_html.sh
第二步:写入脚本内容
#!/bin/bash
# 自动备份 /var/www/html 到 /backup 目录,文件名带日期
BACKUP_DIR="/backup"
SOURCE_DIR="/var/www/html"
DATE=$(date +%Y%m%d_%H%M%S)
# 如果备份目录不存在则创建
mkdir -p $BACKUP_DIR
# 执行打包
tar -czf ${BACKUP_DIR}/html_backup_${DATE}.tar.gz $SOURCE_DIR
# 删除超过7天的旧备份(保留最近7份)
find $BACKUP_DIR -name "html_backup_*.tar.gz" -mtime +7 -delete
echo "备份完成:${BACKUP_DIR}/html_backup_${DATE}.tar.gz"
代码解释:
#!/bin/bash告诉系统用bash解释器。date +%Y%m%d_%H%M%S获取当前时间,用来生成唯一文件名。tar -czf打包压缩,-c创建,-zgzip压缩,-f指定文件名。find ... -mtime +7 -delete自动清理7天前的备份。
第三步:赋予执行权限
chmod +x backup_html.sh
第四步:运行脚本
./backup_html.sh
如果看到“备份完成:/backup/html_backup_20250315_120000.tar.gz”这样的输出,说明成功了。
检查一下备份文件是否存在:ls -lh /backup/。
案例二:批量重命名文件,自动添加前缀
运维时经常遇到一堆日志文件,需要批量加上“prod_”前缀以区分环境。
比如将 app.log.1、app.log.2 改为 prod_app.log.1、prod_app.log.2。
创建脚本 rename_logs.sh
nano rename_logs.sh
写入内容
#!/bin/bash
# 批量给当前目录下的 app.log.* 文件添加 prod_ 前缀
PREFIX="prod_"
for file in app.log.*; do
if [ -f "$file" ]; then
mv "$file" "${PREFIX}${file}"
echo "已重命名:$file → ${PREFIX}${file}"
fi
done
关键点:
for file in app.log.*会匹配所有以app.log.开头的文件。if [ -f "$file" ]确保只处理普通文件,避免目录或符号链接。- 变量使用时尽量加双引号,避免文件名包含空格导致拆词。
运行与验证
chmod +x rename_logs.sh
./rename_logs.sh
执行后,用ls -l查看,文件名应该已经都加上了 prod_。
避坑指南:新手最常踩的三个坑
哪怕照着上面两个Linux Shell脚本编写实战案例做,也可能遇到以下问题:
- 脚本无法执行:权限不够
错误信息 Permission denied。
解决:chmod +x 脚本名。
如果还是不行,检查脚本所在文件系统的挂载选项是否加了noexec(可以 mount | grep 目录 查看)。
- 变量没展开或意外截断
比如忘记在变量名外面加双引号,遇到空格或特殊字符就会炸。建议养成习惯:所有$变量都用"$变量"包起来,尤其在 mv、cp、rm 等命令里。
- 路径写错了,找不到文件
脚本里使用相对路径时,要明确当前工作目录。
建议用绝对路径,或者在脚本开头加 cd "$(dirname "$0")" 切换到脚本所在目录。$0 是脚本自身的路径。
验证脚本是否运行成功:三步检查法
每次写完或修改脚本后,不要直接上生产,用这三步确保安全:
- 语法检查
bash -n 脚本名.sh,如果没有任何输出,说明语法没问题。
如果报错,会指出第几行有问题。
- 试运行(只输出不执行)
对于可能造成破坏的命令(比如删除、重命名),先注释掉真正执行的命令,加上echo看看会执行什么。
例如将 mv "$file" newname 改成 echo mv "$file" newname,确认效果后再去掉 echo。
- 小范围测试
创建一个测试目录,拷贝几个样本文件或目录,运行脚本看看结果是否符合预期。
确认无误后再到真实目录执行。
掌握了这三个案例和避坑点,你就可以独立编写很多日常运维用的Shell脚本了。
记住:Linux Shell脚本编写实战案例的核心就是“明确需求→写命令→加判断→测试”。
遇到问题先看错误信息,再根据错误类型解决。
多动手敲几遍,半个月后你也会觉得Shell脚本很简单。
如果你正在学习Linux Shell脚本编写实战案例,建议从这两个例子开始,逐渐尝试添加变量、循环、条件判断和函数。
当你能用脚本自动完成备份、日志清理、批量配置修改时,运维效率会提升好几倍。