Linux Shell 脚本编程实验报告
实验名称
使用 Shell 脚本实现自动化文件备份(mybak.sh)
一、实验目的
-
掌握 Linux 下 Shell 脚本的编写规范与执行方法。
-
熟练使用 tar 命令实现文件/文件夹的归档与压缩。
-
学会使用预定义变量实现脚本参数化、可配置化。
-
实现静默执行、备份信息展示等功能,理解脚本重定向、系统变量的用法。
-
能够按照需求完成自动化文件备份脚本的设计与测试。
二、实验环境
-
操作系统:CentOS 7 / Ubuntu(任意 Linux 发行版)
-
脚本语言:Bash
-
工具:vim 编辑器、tar 压缩工具
三、实验需求
-
备份文件输出到自定义用户名的家目录(如 /home/用户名)。
-
使用 tar 命令进行归档压缩,压缩包文件名格式为:beifen-用户名-当前日期.tgz(如 beifen-WangWu-20260330.tgz)。
-
脚本全程使用变量实现,执行过程中需显示备份进程信息,包括:已执行的脚本文件名、备份对象总数、具体备份内容、当前工作目录。
-
压缩过程不在 bash 工作台(终端)中输出,实现静默执行。
四、实验思路
-
定义核心变量:包括用户名、备份目标路径、需要备份的文件/文件夹列表、当前日期、压缩包名称等,确保脚本可灵活修改。
-
展示备份进程信息:在脚本执行初期,输出脚本名称、当前工作目录、备份目标目录、备份对象数量及具体内容,让用户清晰了解备份状态。
-
执行静默备份:使用 tar 命令的归档压缩功能,结合输出重定向,屏蔽压缩过程中的所有终端输出,仅保留关键的进度和结果提示。
-
输出备份结果:备份完成后,提示备份成功,并显示备份对象总数、备份文件的完整路径,方便用户验证备份结果。
五、实验代码(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 "========================================"
六、实验步骤
-
创建脚本文件:打开 Linux 终端,输入命令 vim mybak.sh,进入 vim 编辑器。
-
编写并保存脚本:按 i 键进入编辑模式,粘贴上述实验代码,编辑完成后按 ESC 键退出编辑模式,输入 :wq 保存并退出 vim 编辑器。
-
赋予脚本执行权限:在终端输入命令 chmod +x mybak.sh,为脚本添加可执行权限(否则无法直接执行)。
-
执行脚本:输入命令 ./mybak.sh,运行备份脚本,终端会显示备份进程信息及最终结果。
-
验证备份结果:输入命令 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/ 命令,可看到生成的压缩包备份完成。



八、关键知识点说明
-
变量定义:脚本中所有核心参数均使用变量定义,避免硬编码,便于后续修改(如修改用户名、备份内容,仅需修改变量区即可)。
-
系统变量 $0:Shell 内置系统变量,用于自动获取当前执行的脚本文件名,无需手动输入,提升脚本灵活性。
-
tar 命令参数:-z 表示使用 gzip 压缩格式,-c 表示创建新的归档文件,-f 表示指定归档文件名称,三者结合实现归档+压缩功能。
-
静默输出实现:> /dev/null 2>&1 是 Shell 输出重定向语法,其中 > /dev/null 用于丢弃标准输出,2>&1 用于丢弃错误输出,从而实现压缩过程不显示任何终端信息。
-
日期自动生成:date +%Y%m%d 命令用于获取当前系统日期,格式为年月日(如 20260330),确保压缩包名称唯一,避免覆盖原有备份文件。
九、实验总结
本次实验围绕自动化文件备份脚本(mybak.sh)的编写与测试展开,完全满足实验需求,通过实验掌握了 Linux Shell 脚本编程的核心技能,具体总结如下:
-
功能实现:成功实现了文件归档压缩、备份路径指定、静默执行、备份信息展示等所有需求,脚本可直接用于日常文件备份,实用性强。
-
技能提升:熟练掌握了 Shell 脚本变量定义、系统变量使用、tar 命令操作、输出重定向等核心知识点,理解了 Linux 运维自动化的基本思想。
-
脚本优化:脚本结构清晰,分为变量区、信息展示区、备份执行区、结果提示区,便于阅读和维护,可根据实际需求灵活修改备份内容、用户名等参数。
-
问题与解决:实验过程中,曾出现脚本无执行权限、压缩包名称格式错误等问题,通过 chmod 赋予权限、修正变量拼接语法等方式解决,提升了问题排查能力。
通过本次实验,深刻认识到 Shell 脚本在 Linux 自动化运维中的重要性,后续可在此基础上扩展脚本功能,如添加备份失败提示、定期自动备份等,进一步提升脚本的实用性。
更多推荐



所有评论(0)