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

Shell脚本-流程控制语句应用案例

在Shell脚本编程中,流程控制语句是实现逻辑控制和自动化任务处理的关键。通过合理运用条件判断、循环等流程控制语句,可以编写出高效、灵活的脚本程序。本文将通过几个实际的应用案例来展示如何使用这些流程控制语句解决具体的编程问题。

案例一:批量重命名文件

假设你有一组图片文件,想要根据特定规则(如添加前缀或修改扩展名)批量重命名这些文件。

脚本示例:

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

说明:

  • 使用for循环遍历指定类型的文件。
  • 通过if [ -f "$file" ]确保只处理普通文件。
  • mv命令用于重命名文件,并打印操作信息以便确认执行结果。

案例二:监控系统资源并发送警报

编写一个脚本来定期检查系统的CPU使用率和内存使用情况,如果超过设定阈值则发送警报(例如打印警告信息)。

脚本示例:

#!/bin/bash# 设置警戒线
cpu_threshold=80
mem_threshold=75while true; docpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') # 获取CPU使用率mem_info=$(free -m | awk 'NR==2{printf "%.2f", $3*100/$2 }') # 获取内存使用率if (( $(echo "$cpu_usage > $cpu_threshold" | bc -l) )); thenecho "Warning: CPU usage is above threshold at $cpu_usage%"fiif (( $(echo "$mem_info > $mem_threshold" | bc -l) )); thenecho "Warning: Memory usage is above threshold at $mem_info%"fisleep 60 # 每隔一分钟检查一次
done

说明:

  • 使用while true创建一个无限循环,持续监控系统状态。
  • topfree命令分别用于获取CPU和内存的使用情况。
  • bc命令用于浮点数比较。
  • sleep 60让脚本暂停60秒后再次检查,避免过于频繁地占用系统资源。

案例三:根据输入参数执行不同操作

编写一个脚本,接受用户提供的参数来决定执行不同的操作,比如列出目录内容、创建新目录或删除目录。

脚本示例:

#!/bin/bashcase $1 inlist)ls;;create)mkdir "$2"echo "Directory '$2' created.";;delete)rm -r "$2"echo "Directory '$2' deleted.";;*)echo "Usage: $0 {list|create|delete} [directory]"exit 1;;
esac

说明:

  • 利用case语句根据不同参数执行相应的命令。
  • $1$2代表第一个和第二个命令行参数。
  • 提供了基本的帮助信息,指导用户如何正确使用该脚本。

案例四:读取配置文件并动态调整行为

假设有这样一个需求:从配置文件中读取设置,并据此调整脚本的行为。例如,根据配置决定是否启用调试模式。

脚本示例:

#!/bin/bashconfig_file="settings.conf"# 读取配置文件
debug_mode=$(grep "DEBUG_MODE" $config_file | cut -d '=' -f2)# 根据配置调整行为
if [ "$debug_mode" = "true" ]; thenecho "Debug mode is enabled."
elseecho "Debug mode is disabled."
fi# 执行其他操作...

说明:

  • 使用grepcut从配置文件中提取特定设置。
  • 根据提取到的设置值调整脚本行为。

结语

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

相关文章:

  • 龙虎榜——20250425
  • Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • Python编程的真谛:超越语法,理解编程本质
  • 【金仓数据库征文】- 金融HTAP实战:KingbaseES实时风控与毫秒级分析一体化架构
  • mapbox高阶,使用本地dem数据、等高线面数据实现千里江山图效果
  • 如何建立员工培训体系?
  • Ollama 常见命令速览:本地大模型管理指南
  • 六、web自动化测试02
  • 跨境电商必看: Google AdSense 无效流量核心原因及解决措施
  • leetcode刷题日记——逆波兰表达式求值
  • 如何用WordPress AI插件自动生成SEO文章,提升网站流量?
  • 开源免费!AI视频分析神器,智能识别画面,1秒提取关键帧!附详细教程
  • 反转链表.
  • G1垃圾回收器中YoungGC和MixedGC的区别
  • 【ESP32-IDF笔记】20-配置以太网网络(W5500)
  • linux离线部署open-metadata
  • kotlin与MVVM结合使用总结(三)
  • 13.ArkUI Navigation的介绍和使用
  • SIEMENS PLC程序解读 -Serialize(序列化)SCATTER_BLK(数据分散)
  • 关于位运算的一些小记
  • 技术派|“会飞的手榴弹”:微型无人机将深刻改变单兵作战方式
  • 马上评丨从东方红一号到神二十,中国航天步履不停
  • 特朗普称或将“大幅降低”对华关税,外交部:打,奉陪到底;谈,大门敞开
  • 特朗普特使将赴俄见普京,俄方:美俄间谈判艰难且耗时
  • “80后”师虎已任陕西旬邑县委书记
  • 神舟十九号航天员乘组计划于4月29日返回东风着陆场