零基础也能学会:Linux Shell脚本编写实战案例详解

从零开始:你的第一个Shell脚本长什么样?

很多新手觉得Shell脚本很神秘,其实它就是把要在终端里手动敲的多个命令,提前写到一个文件里,让系统帮你自动执行。
Linux Shell脚本编写实战案例千千万,但核心思路都一样:明确任务→写好命令→保存运行

动手之前,先确认你的环境:

  • 一台安装了Linux系统的服务器或个人电脑(本文以Ubuntu 22.04为例)。
  • 一个文本编辑器(推荐nanovim,也可以用本地的记事本写完再传上去)。
  • 普通用户权限即可,只需要知道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.1app.log.2 改为 prod_app.log.1prod_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脚本编写实战案例做,也可能遇到以下问题:

  1. 脚本无法执行:权限不够

错误信息 Permission denied
解决:chmod +x 脚本名
如果还是不行,检查脚本所在文件系统的挂载选项是否加了noexec(可以 mount | grep 目录 查看)。

  1. 变量没展开或意外截断

比如忘记在变量名外面加双引号,遇到空格或特殊字符就会炸。建议养成习惯:所有$变量都用"$变量"包起来,尤其在 mvcprm 等命令里。

  1. 路径写错了,找不到文件

脚本里使用相对路径时,要明确当前工作目录。
建议用绝对路径,或者在脚本开头加 cd "$(dirname "$0")" 切换到脚本所在目录。$0 是脚本自身的路径。

验证脚本是否运行成功:三步检查法

每次写完或修改脚本后,不要直接上生产,用这三步确保安全:

  1. 语法检查

bash -n 脚本名.sh,如果没有任何输出,说明语法没问题。
如果报错,会指出第几行有问题。

  1. 试运行(只输出不执行)

对于可能造成破坏的命令(比如删除、重命名),先注释掉真正执行的命令,加上echo看看会执行什么。
例如将 mv "$file" newname 改成 echo mv "$file" newname,确认效果后再去掉 echo

  1. 小范围测试

创建一个测试目录,拷贝几个样本文件或目录,运行脚本看看结果是否符合预期。
确认无误后再到真实目录执行。

掌握了这三个案例和避坑点,你就可以独立编写很多日常运维用的Shell脚本了。
记住:Linux Shell脚本编写实战案例的核心就是“明确需求→写命令→加判断→测试”。
遇到问题先看错误信息,再根据错误类型解决。
多动手敲几遍,半个月后你也会觉得Shell脚本很简单。

如果你正在学习Linux Shell脚本编写实战案例,建议从这两个例子开始,逐渐尝试添加变量、循环、条件判断和函数。
当你能用脚本自动完成备份、日志清理、批量配置修改时,运维效率会提升好几倍。

分享到:
上一篇
Linux定时任务Crontab高级用法
下一篇
零基础也能上手:Linux系统内核升级稳定版教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意