当前位置: 首页 > 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)或&&||

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

相关文章:

  • 集合框架拓展--stream流的使用
  • 生成式AI对话中提示词策略:明确问题、明确目标和提供背景信息是最有效的策略
  • 一招解决所以Maven找不到依赖包的问题
  • Java优雅实现判空方法
  • 在 QCustomPlot中自定义绘图元素
  • 【CentOs】构建云服务器部署环境
  • ClickHouse核心架构设计
  • day47——平方数之和(LeetCode-633)
  • STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)
  • FFmpeg:M3U8的AES加密
  • 《Android 应用开发基础教程》——第三章:布局管理与 UI 组件详解
  • 多模态大语言模型arxiv论文略读(三十一)
  • 机器学习 Day12 集成学习简单介绍
  • [Windows]_[VS2017]_[如何进行远程调试程序]
  • POSIX标准系统调用详解:从概念到实践
  • 破解吞咽困境!进行性核上性麻痹患者的科学饮食方案
  • 62页华为IPD-MM流程:市场调研理论与实践方案精读【附全文阅读】
  • Linux 网络基础(二) (传输协议层:UDP、TCP)
  • 【算法提高】单源最短路的建图方式
  • Linux系统编程---孤儿进程与僵尸进程
  • 洛阳白马寺内的狄仁杰墓挂上公示牌争论尘埃落定?瀍河区文旅局称已确认
  • 宇树的任务已经完成?王兴兴也在等待行业拐点
  • 【社论】地铁读书人也是一道城市风景
  • 心源性猝死正“猎杀”年轻人,这几招保命法则要学会
  • 青海玉树州杂多县发生4.6级地震,震源深度10千米
  • 累计亏损10亿元,桂林旅游怎么了?