当前位置: 首页 > ds >正文

Shell脚本-for循环应用案例

在Shell脚本编程中,for循环是一种强大的工具,用于处理重复性任务。无论是批量处理文件、遍历目录内容还是简单的计数任务,for循环都能提供简洁而有效的解决方案。本文将通过几个实际的应用案例来展示如何使用for循环解决具体的编程问题。

案例一:批量压缩图片

假设你有一组图片文件需要压缩,并希望为每个文件创建一个对应的压缩版本。

脚本示例:

#!/bin/bash# 创建存放压缩后图片的目录
mkdir -p compressed_images# 遍历当前目录下的所有jpg和png文件
for image in *.jpg *.png; doif [ -f "$image" ]; then # 确保是普通文件# 使用ImageMagick工具进行压缩convert "$image" -resize 50% "compressed_images/${image}"echo "Compressed '$image' to 'compressed_images/${image}'"fi
done

说明:

  • 使用convert命令(来自ImageMagick工具集)调整图片大小。
  • mkdir -p compressed_images确保目标目录存在,如果不存在则创建。
  • if [ -f "$image" ]确保只处理普通文件。

案例二:批量重命名文件

假设你有一系列文件需要按照特定规则进行重命名,例如添加前缀或修改扩展名。

脚本示例:

#!/bin/bash# 定义新前缀
prefix="backup_"# 遍历当前目录下的所有txt文件
for file in *.txt; doif [ -f "$file" ]; then # 确保是普通文件new_name="${prefix}${file}"mv "$file" "$new_name"echo "Renamed '$file' to '$new_name'"fi
done

说明:

  • 使用mv命令进行重命名操作。
  • if [ -f "$file" ]确保只处理普通文件。

案例三:定时备份数据库

编写一个脚本来定期备份MySQL数据库,并按日期组织备份文件。

脚本示例:

#!/bin/bash# 设置数据库连接信息
DB_USER="your_db_user"
DB_PASSWORD="your_db_password"
DB_NAME="your_db_name"# 获取当前日期作为备份文件名的一部分
DATE=$(date +"%Y%m%d")# 创建备份目录
mkdir -p backups# 执行备份操作
for db in $DB_NAME; doBACKUP_FILE="backups/${db}_${DATE}.sql"mysqldump -u $DB_USER -p$DB_PASSWORD $db > $BACKUP_FILEecho "Backed up database '$db' to '$BACKUP_FILE'"
done

说明:

  • 使用mysqldump命令导出数据库。
  • $(date +"%Y%m%d")获取当前日期,用于生成备份文件名。
  • mkdir -p backups确保备份目录存在。

案例四:检查并报告系统状态

编写一个脚本来检查系统的磁盘使用情况,并对超过80%使用的分区发出警告。

脚本示例:

#!/bin/bash# 定义阈值
threshold=80# 获取磁盘使用情况
df_output=$(df -h)# 解析输出并检查每个分区
echo "$df_output" | while read -r line; douse_percent=$(echo "$line" | awk '{print $5}' | sed 's/%//')mount_point=$(echo "$line" | awk '{print $6}')if [[ $use_percent -gt $threshold ]]; thenecho "Warning: $mount_point usage is at $use_percent%"fi
done

说明:

  • 使用df -h获取磁盘使用情况。
  • 使用awksed解析输出中的百分比和挂载点。
  • 如果使用率超过设定的阈值,则打印警告信息。

案例五:自动更新软件包

编写一个脚本来自动更新Linux系统上的软件包。

脚本示例:

#!/bin/bash# 更新包列表
sudo apt-get update# 升级已安装的软件包
packages=$(dpkg --get-selections | grep install)
for package in $packages; dosudo apt-get install --only-upgrade $packageecho "Upgraded package: $package"
done

说明:

  • 使用apt-get update更新包列表。
  • dpkg --get-selections | grep install列出所有已安装的软件包。
  • 对每个软件包执行apt-get install --only-upgrade进行升级。

结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

http://www.xdnf.cn/news/2166.html

相关文章:

  • OS库的常用操作
  • 用python进行OCR识别
  • etcher 刻录系统,装系统,ubuntu安装不要联网,grub tryinstall参数记得改为nomodeset
  • datax通过官网工具包,使用Python命令启动时报错
  • Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
  • 多层级的对象如何修改、或json格式
  • Python实验四
  • 2025年保安员证考试题库及答案
  • 深入剖析EM算法:原理、推导与应用
  • CV大模型、NLP大模型与语音处理技术全景解析-AI学习Day5
  • 三维天地智能路径规划引擎:以算法驱动,重新定义智能路径优化技术
  • 前端面试(Vue React)内容目录与备考建议
  • NCCL通信中Group与独立操作的区别
  • OpenCv高阶(九)——背景建模
  • 每天学一个 Linux 命令(31):md5sum
  • SQL语句练习 自学SQL网 基础查询
  • 伟世通与火山引擎深度合作 前沿AI智能座舱解决方案亮相上海车展
  • playwright的简单使用
  • 信令与流程分析
  • 谷歌终止新冠疫情时期结构化数据支持:SEO影响与应对策略
  • 14-DevOps-快速部署Kubernetes
  • K8S Service 原理、案例
  • 零基础教学:用GISBox将RVT转为3DTiles
  • 力扣-hot100(滑动窗口最大值)
  • Promise简介和使用
  • HDRnet——双边滤波和仿射变换的摇身一变
  • 如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL
  • Freertos--统计所有任务栈信息以及CPU占比和钩子函数
  • Flutter Dart 集合类型List Set Map详解军 以及循环语句 forEaclh map where any every
  • 【动手学大模型开发】VSCode 连接远程服务器