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.mzph.cn/pingmian/78251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrmo手动同步数据

地址栏输入 chrome://sync-internals分别点击这2个按钮即可触发手动同步

为什么圆形在GeoJSON中被表示为多边形(Polygon)而不是圆形类型

GeoJSON规范中没有"圆形"类型 GeoJSON是一种用于表示地理空间数据的标准格式,它的规范中只定义了以下几种基本几何类型: Point (点) LineString (线) Polygon (多边形) MultiPoint (多点) MultiLineString (多线) MultiPolygon (多多边形) GeometryCollection (几…

大数据组件学习之--Kafka 安装搭建

一、前置环境 在搭建kafka之前,请确认自己的hadoop、zookeeper是否搭建完成且可正常运行 二、下载并上传安装包(链接为百度网盘) kafka安装包 tar -zxvf /opt/software/kafka_2.12-2.4.1.tgz -C /opt/module/ 进入解压后的目录更改文件名…

PyQt6基础_pyqtgraph_折线图with缩放调节

目录 字符型横坐标代码 折线图代码 运行 创建新类,继承pg.PlotWidget,在新类中实现业务内容,重写pg.PlotWidget中的wheelEvent方法并使用业务数据实现比较理想的缩放状态。 字符型横坐标代码 class StrAxisItem(pg.AxisItem):def __init…

联邦元学习实现个性化物联网的框架

随着数据安全和隐私保护相关法律法规的出台,需要直接在中央服务器上收集和处理数据的集中式解决方案,对于个性化物联网而言,训练各种特定领域场景的人工智能模型已变得不切实际。基于此,中山大学,南洋理工大学&#xf…

audio 核心服务AudioPolicyService 和AudioFlinger启动流程

目录 1、audioserver启动 2、AudioPolicyService启动 3、AudioFlinger启动 audio的核心服务有两个,AudioPolicyService 和AudioFlinger他们到在audioserver一个进程中 1、audioserver启动 设备开机,系统启动时将执行 /system/etc/init/audioserver.rc…

反爬虫机制中的验证码识别:类型、技术难点与应对策略

在互联网数据抓取领域,验证码识别是爬虫过程中的关键环节之一。下面对常见验证码类型、技术难点及应对策略进行详细解析,并提供多种场景下的代码实现示例。 一、验证码类型与技术难点 (一)图形验证码 1. 字符验证码 特征&#…

vue element使用el-table时,切换tab,table表格列项发生错位问题

展示问题 问题描述:使用el-table的fixed"right"属性后,如果切换tab时,回出现最后一列错误的问题 官网提供解决方法:doLayout 需要注意的事项:我这里是通过组件使用的table组件,涉及多层组件封装…

示例:Spring JDBC 声明式事务(xml配置形式)

声明式事务是指在不修改源代码的情况下通过配置applicationContext.xml自动实现事务控制,其本质是AOP环绕通知。它的触发时机为:1、当目标方法执行成功时自动提交事务,2、当目标方法抛出运行时异常时,自动事务回滚 核心步骤示例&a…

在vmware中ubuntu系统因为安装了docker查不到ip地址

问题截图: 根据提供的截图信息,可以明确看到ens33网卡处于**物理连接断开(NO-CARRIER)且接口关闭(DOWN)**的状态,这是导致无法获取IP地址的直接原因。以下是针对VMware虚拟机的具体解决方案&am…

51c大模型~合集121

我自己的原文哦~ https://blog.51cto.com/whaosoft/13869815 #大模型何以擅长小样本学习? 这项研究给出详细分析 近年来,大语言模型(LLM)在人工智能领域取得了突破性进展,成为推动自然语言处理技术发展与通用人…

Babylon.js 材质统一转换指南:将 AssetContainer 中的所有材质转换为 PBRMetallicRoughnessMaterial

在现代 3D 开发中,基于物理的渲染(PBR)已成为行业标准。本文将详细介绍如何在 Babylon.js 中将 AssetContainer 加载的各种材质统一转换为 PBRMetallicRoughnessMaterial,实现项目材质的标准化。 为什么需要材质转换? PBRMetallicRoughness…

Go slice切片使用教程,一次通关!

简介 Go 中的 切片(slice) 是 Go 最强大、最常用的数据结构之一。它是对数组的轻量封装,比数组更灵活,几乎所有的集合处理都用切片来完成。 什么是切片(slice) 切片是一个拥有 长度(len&…

nodejs的包管理工具介绍,npm的介绍和安装,npm的初始化包 ,搜索包,下载安装包

nodejs的包管理工具介绍,npm的介绍和安装,npm的初始化包 ,搜索包,下载安装包 🧰 一、Node.js 的包管理工具有哪些? 工具简介是否默认特点npmNode.js 官方的包管理工具(Node Package Manager&am…

FPGA设计 时空变换

1、时空变换基本概念 1.1、时空概念简介 时钟速度决定完成任务需要的时间,规模的大小决定完成任务所需要的空间(资源),因此速度和规模就是FPGA中时间和空间的体现。 如果要提高FPGA的时钟,每个clk内组合逻辑所能做的事…

增加首屏图片

增加首屏图片&#xff08;bg.jpg&#xff09; web-mobile类型打包 //index.html脚本 <div id"myDiv_1111"style"background: url(./bg.jpg) 50% 50%/ 100% auto no-repeat ; width:100%;height:100%;position:absolute;"></div> //游戏内脚本…

贪心算法~~

目录 一、理论基础 二、题目练习 &#xff08;1&#xff09;455. 分发饼干 &#xff08;2&#xff09;53. 最大子数组和 - 力扣 &#xff08;3&#xff09;122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; &#xff08;4&#xff09;860. 柠檬水找零…

形象解释 HTTP 的四种常见请求方式及其中的区别联系

HTTP 的常见请求方式常见的有四种&#xff1a;GET、POST、PUT、DELETE&#xff0c;它们各自的功能不一样。 &#x1f35c; 场景比喻&#xff1a;HTTP 请求像“去餐厅点菜” 请求方式行为餐厅比喻说明GET获取数据看菜单/问服务员&#xff1a;你们有什么菜&#xff1f;不带食材、…

string的基本使用

string的模拟实现 string的基本用法string的遍历&#xff08;三种方式&#xff09;&#xff1a;关于auto&#xff08;自动推导&#xff09;:范围for: 迭代器普通迭代器(可读可改&#xff09;const迭代器&#xff08;可读不可改&#xff09; string细小知识点string的常见接口引…

kubernetes》》k8s》》证书有效期

cd /etc/kubernetes/pki openssl x509 -in apiserver.crt -text -noount通常&#xff0c;Kubernetes的证书是由kubeadm生成的&#xff0c;所以可能需要修改kubeadm的源码或者配置 登录Master节点 》》》默认延续1年 # 查看证书 检查证书有效期 # 该命令显示 /etc/kubernetes…