提示信息

Shell 编程综合案例

闭月羞花 已关注

Shell 编程是一种在类 Unix 操作系统上进行脚本编写的方式,可以用于自动化任务、处理文件、监控系统等。下面我将为您提供一个综合的 Shell 编程案例,涵盖文件操作、条件判断、循环、函数等常见用法。

案例需求

假设我们需要编写一个 Shell 脚本来完成以下任务:

  1. 检查指定目录中是否存在某类型的文件(如 .log 文件)。
  2. 如果找到匹配的文件,统计文件的数量和总大小。
  3. 将文件名和大小输出到一个新的日志文件中。
  4. 提供压缩选项,将匹配的文件压缩并移动到一个备份目录中。

Shell 脚本实现

  1. #!/bin/bash
  2. # 定义变量
  3. TARGET_DIR="./logs"
  4. BACKUP_DIR="./backup"
  5. LOG_FILE="summary.log"
  6. FILE_TYPE="*.log"
  7. # 检查目标目录是否存在
  8. if [ ! -d "$TARGET_DIR" ]; then
  9. echo "目标目录 $TARGET_DIR 不存在。"
  10. exit 1
  11. fi
  12. # 创建备份目录(如果不存在)
  13. mkdir -p "$BACKUP_DIR"
  14. # 统计文件数量和大小
  15. file_count=$(find "$TARGET_DIR" -type f -name "$FILE_TYPE" | wc -l)
  16. total_size=$(find "$TARGET_DIR" -type f -name "$FILE_TYPE" -exec du -ch {} + | grep total$ | awk '{print $1}')
  17. # 打印统计信息
  18. echo "在目录 $TARGET_DIR 中找到 $file_count 个 $FILE_TYPE 文件,总大小为 $total_size 。"
  19. # 将文件名和大小输出到日志文件
  20. {
  21. echo "文件摘要日志"
  22. echo "日期: $(date)"
  23. echo "所在目录: $TARGET_DIR"
  24. echo "文件类型: $FILE_TYPE"
  25. echo "文件数量: $file_count"
  26. echo "总大小: $total_size"
  27. echo ""
  28. echo "文件明细:"
  29. find "$TARGET_DIR" -type f -name "$FILE_TYPE" -exec ls -lh {} \;
  30. } > "$LOG_FILE"
  31. echo "文件明细已记录在 $LOG_FILE 。"
  32. # 提供压缩选项
  33. read -p "是否要将这些文件压缩并备份?(y/n): " choice
  34. if [[ "$choice" == "y" || "$choice" == "Y" ]]; then
  35. find "$TARGET_DIR" -type f -name "$FILE_TYPE" -exec tar -czf "$BACKUP_DIR/backup_$(date +%Y%m%d%H%M%S).tar.gz" {} +
  36. echo "文件已压缩并移至 $BACKUP_DIR 。"
  37. else
  38. echo "文件未进行压缩。"
  39. fi

解释

  1. 变量定义:脚本开始时定义了一些变量,指定了目标目录、备份目录、日志文件名和文件类型。

  2. 目录检查:使用 -d 来检查目标目录是否存在,如果不存在就退出脚本。

  3. 文件统计:使用 find 命令查找符合条件的文件,并统计文件数量和大小。

  4. 日志记录:将统计信息和文件详细信息写入日志文件,这里利用了多行写入的方式。

  5. 压缩选项:提供用户选择,是否压缩匹配的文件并存入备份目录。用 tar 命令实现压缩,并以当前时间为文件名的一部分。

  6. 输入处理:使用 read 处理用户输入,并进行简单的条件判断。

这个案例展示了 Bash 脚本的一些基本功能,可以根据实际需要进行修改和扩展。通过练习,您可以熟练掌握更多有用的 Shell 编程技巧。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
闭月羞花 关注 已关注

最近一次登录:2024-11-09 18:35:57   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图