Shell 脚本入门:写第一个自动化备份脚本

举报
yd_298725470 发表于 2026/11/13 06:04:53 2026/11/13
【摘要】 每天手动备份文件,既耗时又容易忘。学会写一个简单的 Shell 脚本,就能让备份定时自动完成。本文用一个真实可用的例子,带你从零写出第一个自动化备份脚本。 一、Shell 脚本是什么Shell 是 Linux 系统的命令解释器,我们在终端里输入的每一条命令,都是由 Shell 执行的。把多条命令按顺序写进一个以 .sh 结尾的文本文件,再交给 Shell 执行,这个文件就是 Shell 脚本...

每天手动备份文件,既耗时又容易忘。学会写一个简单的 Shell 脚本,就能让备份定时自动完成。本文用一个真实可用的例子,带你从零写出第一个自动化备份脚本。

一、Shell 脚本是什么

Shell 是 Linux 系统的命令解释器,我们在终端里输入的每一条命令,都是由 Shell 执行的。把多条命令按顺序写进一个以 .sh 结尾的文本文件,再交给 Shell 执行,这个文件就是 Shell 脚本。

写脚本之前,先确认你的系统里有 bash。在终端输入 bash --version,能看到版本号就说明环境就绪。大多数 Linux 发行版默认都安装了 bash。

二、备份脚本要做什么

我们的目标很明确:每天把 ~/work 目录打包压缩,存到 ~/backup 目录,并按日期命名,旧备份超过 7 天自动删除。

先手动想清楚步骤:第一,检查备份目录是否存在,不存在就创建;第二,用 tar 命令打包压缩;第三,删除 7 天前的旧备份;第四,输出一条完成提示。

三、写出第一个脚本

新建文件 backup.sh,写入以下内容:

#!/bin/bash
# 自动备份脚本:打包 ~/work,保留最近 7 天

SRC_DIR="$HOME/work"
BACKUP_DIR="$HOME/backup"
DATE=$(date +%Y%m%d)
ARCHIVE="$BACKUP_DIR/backup-$DATE.tar.gz"

mkdir -p "$BACKUP_DIR"
tar -czf "$ARCHIVE" "$SRC_DIR"
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +7 -delete
echo "备份完成:$ARCHIVE"

逐行看一下:第一行 #!/bin/bash 叫 Shebang,告诉系统用 bash 来执行这个脚本;DATE=$(date +%Y%m%d) 用命令替换拿到当天日期,例如 20261113;mkdir -p 在目录不存在时创建它,已存在也不会报错;tar -czf 把源目录打包并用 gzip 压缩;find 命令找出修改时间超过 7 天的旧备份并删除。

写完后要给脚本加上可执行权限:chmod +x backup.sh,然后执行 ./backup.sh,看到“备份完成”的提示,再用 ls ~/backup 确认压缩包已经生成。

四、让备份每天自动跑

手动执行还是会忘。Linux 自带的 crontab 可以定时执行脚本。输入 crontab -e,在文件末尾加上一行:

0 2 * * * /home/username/backup.sh >> /home/username/backup.log 2>&1

这行表示每天凌晨 2 点执行脚本,输出追加到 backup.log。注意把路径换成你自己的实际路径,脚本里最好也用绝对路径,避免定时任务环境下找不到文件。

五、新手常踩的坑

第一个坑是换行符:如果在 Windows 下编辑脚本再传到 Linux,行尾可能带上回车符,执行时会报奇怪的错误。用 dos2unix backup.sh 或者直接在 Linux 下编辑可以避免。

第二个坑是权限:脚本没有可执行权限时会报 Permission denied,记得 chmod +x。第三个坑是路径:定时任务里当前目录不确定,脚本中凡是涉及文件的地方都写绝对路径最稳妥。

六、小结

一个能用的备份脚本只需要四步:创建目录、打包压缩、清理旧文件、输出提示。再配合 crontab,备份就从一件需要惦记的事,变成一件不需要惦记的事。建议你先在测试目录里跑通,再把 SRC_DIR 换成真正需要备份的目录;跑通之后,可以再给脚本加上压缩包完整性校验,或者把备份同步到另一台机器。今天就动手写下你的 backup.sh 吧。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。