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

Linux教程-Shell编程系列二

文章目录

      • 核心控制结构概述
      • 为什么要学习控制结构?☕
      • 一、条件判断(if语句)
      • 二、分支选择(case语句)
      • 三、循环结构
      • 四、函数中的控制结构
      • 五、注意事项

Shell编程中的控制结构是脚本逻辑实现的核心工具,它们决定了程序的执行流程和自动化任务的效率。控制结构主要包括条件判断循环执行分支选择三类,能够根据不同的条件或输入动态调整脚本行为。

核心控制结构概述

  1. 条件判断(if语句)

    • 通过逻辑测试(如文件存在性、数值比较)决定执行路径,支持单分支(if-then)、双分支(if-then-else)和多路分支(if-elif-else)。
    • 示例:根据用户输入判断成绩等级或文件状态。
  2. 分支选择(case语句)

    • 对同一变量进行多模式匹配,比if-elif更简洁,适合处理菜单选项或错误码分类。
    • 示例:根据命令行参数调用不同功能模块。
  3. 循环结构(for/while/until)

    • for循环:遍历列表或文件集合,批量处理数据。
    • while/until循环:基于条件重复执行,前者条件为真时循环,后者条件为假时循环。
    • 示例:监控进程状态直到满足条件,或批量重命名文件。
  4. 流程控制工具

    • breakcontinue:分别用于跳出循环或跳过当前迭代。
    • 函数嵌套:将控制结构封装为函数,提升代码复用性。

为什么要学习控制结构?☕

  • 自动化效率:通过条件与循环组合,可替代人工重复操作(如日志分析、备份)。
  • 灵活响应:动态适应不同输入或系统状态(如错误处理、资源监控)。

掌握这些结构是编写高效Shell脚本的基础,后续我们将通过实例深入每种结构的语法与应用场景。

Shell编程中的控制结构语句是实现脚本逻辑的核心,主要包括条件判断循环结构分支选择。以下是详细分类及示例:


一、条件判断(if语句)

  1. 单分支if
    语法:

    if [ condition ]; thencommands
    fi
    

    示例:检查文件是否存在:

    if [ -f "file.txt" ]; thenecho "文件存在"
    fi
    
  2. 双分支if-else
    语法:

    if [ condition ]; thencommands1
    elsecommands2
    fi
    

    示例:判断数值大小:

    if [ $num -gt 10 ]; thenecho "大于10"
    elseecho "小于等于10"
    fi
    
  3. 多分支if-elif-else
    语法:

    if [ condition1 ]; thencommands1
    elif [ condition2 ]; thencommands2
    elsecommands3
    fi
    

    示例:成绩分级:

    if [ $score -ge 90 ]; thenecho "优秀"
    elif [ $score -ge 60 ]; thenecho "及格"
    elseecho "不及格"
    fi
    
  4. 测试条件

    • 数值比较-eq(等于)、-ne(不等于)、-lt(小于)。
    • 字符串比较=(相等)、!=(不等)。
    • 文件测试-f(文件存在)、-d(目录存在)。

二、分支选择(case语句)

用于多条件匹配,比if-elif更简洁:
语法:

case $variable inpattern1)commands1 ;;pattern2)commands2 ;;*)default_commands ;;
esac

示例:根据输入执行操作:

read -p "输入选项(1/2/3): " choice
case $choice in1) echo "执行操作1" ;;2) echo "执行操作2" ;;3) echo "执行操作3" ;;*) echo "无效输入" ;;
esac

注意

  • 模式支持通配符(如*.txt)。
  • 每个分支以;;结束。

三、循环结构

  1. for循环

    • 遍历列表
      for item in apple banana cherry; doecho "水果: $item"
      done
      
    • C语言风格
      for ((i=1; i<=5; i++)); doecho "数字: $i"
      done
      
  2. while循环
    条件为真时执行:

    count=1
    while [ $count -le 5 ]; doecho "计数: $count"((count++))
    done
    
  3. until循环
    条件为假时执行(与while相反):

    count=1
    until [ $count -gt 5 ]; doecho "计数: $count"((count++))
    done
    
  4. 循环控制

    • break:跳出循环。
    • continue:跳过本次循环。

四、函数中的控制结构

函数内可嵌套控制语句:

check_even() {if [ $(($1 % 2)) -eq 0 ]; thenecho "偶数"elseecho "奇数"fi
}
check_even 4  # 输出"偶数"

五、注意事项

  1. 空格要求[ ]内条件与括号需有空格(如[ $a -eq 10 ])。
  2. 字符串与数值:比较时区分运算符(如字符串用=,数值用-eq)。
  3. 逻辑组合:使用-a(AND)、-o(OR)或&&||

通过灵活组合这些结构,可高效实现自动化任务,如文件处理、系统监控等。

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

相关文章:

  • 一招破敌,掌控 React 渲染术:createRoot 与 root.render
  • 第一章:MySQL视图基础
  • webgl入门实例-矩阵在图形学中的作用
  • Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(五)调试注意的问题
  • Java表达式2.0
  • Java 网络编程性能优化:高吞吐量的实现方法
  • 【Tauri2】027——plugin(三)——fs
  • 出差像是旅游?
  • 2025-04-20 李沐深度学习4 —— 自动求导
  • 中级软件设计师 - 知识点(附真题)目录大全
  • Matplotlib的应用
  • springboot起步依赖的原理是什么?
  • “小坝” 策略:始发站 buffer 控制与优化
  • 专题讨论:BST树上的添加与删除
  • mysql的5.7版本与8.0版本的差异与兼容性
  • Flink介绍——实时计算核心论文之MillWheel论文详解
  • 计算机视觉7——齐次坐标与相机内外参
  • transformer注意力机制
  • 集合框架拓展--stream流的使用
  • 理解 React 的 useEffect
  • 代理模式(Proxy Pattern)
  • 返回内容协商,@ResponseBody 注解
  • C++面试题集合(附答案)
  • [Windows]_[VS2017]_[如何进行远程调试程序]
  • 计算机视觉与深度学习 | 工业视觉缺陷检测如何检小缺陷?背景概述,原理,检测难点,常用的检测算法,算法评估指标,新项目算法选择,算法部署
  • 【Oracle专栏】Oracle中的虚拟列
  • Linux文件时间戳详解:Access、Modify、Change时间的区别与作用
  • PCA——主成分分析数学原理及代码
  • 小迪抓包技术算法加密(6-9天)
  • Dify部署内网时遇到的代理问题及解决办法