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 吧。
- 点赞
- 收藏
- 关注作者
评论(0)