实验名称

使用 Shell 脚本实现自动化文件备份(mybak.sh)

一、实验目的

  1. 掌握 Linux 下 Shell 脚本的编写规范与执行方法。

  2. 熟练使用 tar 命令实现文件/文件夹的归档与压缩。

  3. 学会使用预定义变量实现脚本参数化、可配置化。

  4. 实现静默执行、备份信息展示等功能,理解脚本重定向、系统变量的用法。

  5. 能够按照需求完成自动化文件备份脚本的设计与测试。

二、实验环境

  • 操作系统:CentOS 7 / Ubuntu(任意 Linux 发行版)

  • 脚本语言:Bash

  • 工具:vim 编辑器、tar 压缩工具

三、实验需求

  1. 备份文件输出到自定义用户名的家目录(如 /home/用户名)。

  2. 使用 tar 命令进行归档压缩,压缩包文件名格式为:beifen-用户名-当前日期.tgz(如 beifen-WangWu-20260330.tgz)。

  3. 脚本全程使用变量实现,执行过程中需显示备份进程信息,包括:已执行的脚本文件名、备份对象总数、具体备份内容、当前工作目录。

  4. 压缩过程不在 bash 工作台(终端)中输出,实现静默执行。

四、实验思路

  1. 定义核心变量:包括用户名、备份目标路径、需要备份的文件/文件夹列表、当前日期、压缩包名称等,确保脚本可灵活修改。

  2. 展示备份进程信息:在脚本执行初期,输出脚本名称、当前工作目录、备份目标目录、备份对象数量及具体内容,让用户清晰了解备份状态。

  3. 执行静默备份:使用 tar 命令的归档压缩功能,结合输出重定向,屏蔽压缩过程中的所有终端输出,仅保留关键的进度和结果提示。

  4. 输出备份结果:备份完成后,提示备份成功,并显示备份对象总数、备份文件的完整路径,方便用户验证备份结果。

五、实验代码(mybak.sh)

#!/bin/bash

# 自动化文件备份脚本,满足实验所有需求

#========= 预定义变量(可根据需求修改) =========

USER_NAME="WangWu" # 自定义用户名,对应家目录 /home/WangWu

BAK_HOME="/home/$USER_NAME" # 备份文件输出目录(用户家目录)

BAK_LIST="/etc/hosts /root /tmp" # 需要备份的文件/目录(可添加多个,空格分隔)

NOW_DATE=$(date +%Y%m%d) # 当前日期,格式:年月日(如 20260330)

BAK_NAME="beifen-${USER_NAME}-${NOW_DATE}.tgz" # 压缩包名称(符合需求格式)

FULL_PATH="${BAK_HOME}/${BAK_NAME}" # 备份文件完整路径

FILE_NUM=$(echo $BAK_LIST | wc -w) # 统计备份对象数量

NOW_DIR=$(pwd) # 获取当前工作目录

#========= 输出备份进程信息 =========

echo "========================================"

echo "已执行【$0】脚本" # $0 自动获取当前脚本文件名

echo "当前工作目录:$NOW_DIR"

echo "备份目标目录:$BAK_HOME"

echo "备份文件名称:$BAK_NAME"

echo "共需备份对象数量:$FILE_NUM"

echo "具体备份内容:$BAK_LIST"

echo "========================================"

#========= 静默执行压缩备份(不输出到终端) =========

tar -zcf $FULL_PATH $BAK_LIST > /dev/null 2>&1

#========= 备份完成提示 =========

echo "备份成功!共完成 $FILE_NUM 个对象备份"

echo "备份文件路径:$FULL_PATH"

echo "========================================"

六、实验步骤

  1. 创建脚本文件:打开 Linux 终端,输入命令 vim mybak.sh,进入 vim 编辑器。

  2. 编写并保存脚本:按 i 键进入编辑模式,粘贴上述实验代码,编辑完成后按 ESC 键退出编辑模式,输入 :wq 保存并退出 vim 编辑器。

  3. 赋予脚本执行权限:在终端输入命令 chmod +x mybak.sh,为脚本添加可执行权限(否则无法直接执行)。

  4. 执行脚本:输入命令 ./mybak.sh,运行备份脚本,终端会显示备份进程信息及最终结果。

  5. 验证备份结果:输入命令 ls /home/WangWu/(替换为自定义用户名),查看是否生成符合格式的压缩包,确认备份成功。

七、实验运行结果

执行脚本后,终端输出如下(无压缩过程输出,仅显示关键信息):

========================================

已执行【./mybak.sh】脚本

当前工作目录:/root

备份目标目录:/home/WangWu

备份文件名称:beifen-WangWu-20260330.tgz

共需备份对象数量:3

具体备份内容:/etc/hosts /root /tmp

========================================

备份成功!共完成 3 个对象备份

备份文件路径:/home/WangWu/beifen-WangWu-20260330.tgz

========================================

验证结果:执行 ls /home/WangWu/ 命令,可看到生成的压缩包备份完成。

八、关键知识点说明

  1. 变量定义:脚本中所有核心参数均使用变量定义,避免硬编码,便于后续修改(如修改用户名、备份内容,仅需修改变量区即可)。

  2. 系统变量 $0:Shell 内置系统变量,用于自动获取当前执行的脚本文件名,无需手动输入,提升脚本灵活性。

  3. tar 命令参数:-z 表示使用 gzip 压缩格式,-c 表示创建新的归档文件,-f 表示指定归档文件名称,三者结合实现归档+压缩功能。

  4. 静默输出实现:> /dev/null 2>&1 是 Shell 输出重定向语法,其中 > /dev/null 用于丢弃标准输出,2>&1 用于丢弃错误输出,从而实现压缩过程不显示任何终端信息。

  5. 日期自动生成:date +%Y%m%d 命令用于获取当前系统日期,格式为年月日(如 20260330),确保压缩包名称唯一,避免覆盖原有备份文件。

九、实验总结

本次实验围绕自动化文件备份脚本(mybak.sh)的编写与测试展开,完全满足实验需求,通过实验掌握了 Linux Shell 脚本编程的核心技能,具体总结如下:

  1. 功能实现:成功实现了文件归档压缩、备份路径指定、静默执行、备份信息展示等所有需求,脚本可直接用于日常文件备份,实用性强。

  2. 技能提升:熟练掌握了 Shell 脚本变量定义、系统变量使用、tar 命令操作、输出重定向等核心知识点,理解了 Linux 运维自动化的基本思想。

  3. 脚本优化:脚本结构清晰,分为变量区、信息展示区、备份执行区、结果提示区,便于阅读和维护,可根据实际需求灵活修改备份内容、用户名等参数。

  4. 问题与解决:实验过程中,曾出现脚本无执行权限、压缩包名称格式错误等问题,通过 chmod 赋予权限、修正变量拼接语法等方式解决,提升了问题排查能力。

通过本次实验,深刻认识到 Shell 脚本在 Linux 自动化运维中的重要性,后续可在此基础上扩展脚本功能,如添加备份失败提示、定期自动备份等,进一步提升脚本的实用性。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐