Linux教程-Shell编程系列二
文章目录
- 核心控制结构概述
- 为什么要学习控制结构?☕
- 一、条件判断(if语句)
- 二、分支选择(case语句)
- 三、循环结构
- 四、函数中的控制结构
- 五、注意事项
Shell编程中的控制结构是脚本逻辑实现的核心工具,它们决定了程序的执行流程和自动化任务的效率。控制结构主要包括条件判断、循环执行和分支选择三类,能够根据不同的条件或输入动态调整脚本行为。
核心控制结构概述
-
条件判断(if语句)
- 通过逻辑测试(如文件存在性、数值比较)决定执行路径,支持单分支(
if-then
)、双分支(if-then-else
)和多路分支(if-elif-else
)。 - 示例:根据用户输入判断成绩等级或文件状态。
- 通过逻辑测试(如文件存在性、数值比较)决定执行路径,支持单分支(
-
分支选择(case语句)
- 对同一变量进行多模式匹配,比
if-elif
更简洁,适合处理菜单选项或错误码分类。 - 示例:根据命令行参数调用不同功能模块。
- 对同一变量进行多模式匹配,比
-
循环结构(for/while/until)
- for循环:遍历列表或文件集合,批量处理数据。
- while/until循环:基于条件重复执行,前者条件为真时循环,后者条件为假时循环。
- 示例:监控进程状态直到满足条件,或批量重命名文件。
-
流程控制工具
break
和continue
:分别用于跳出循环或跳过当前迭代。- 函数嵌套:将控制结构封装为函数,提升代码复用性。
为什么要学习控制结构?☕
- 自动化效率:通过条件与循环组合,可替代人工重复操作(如日志分析、备份)。
- 灵活响应:动态适应不同输入或系统状态(如错误处理、资源监控)。
掌握这些结构是编写高效Shell脚本的基础,后续我们将通过实例深入每种结构的语法与应用场景。
Shell编程中的控制结构语句是实现脚本逻辑的核心,主要包括条件判断、循环结构和分支选择。以下是详细分类及示例:
一、条件判断(if语句)
-
单分支if
语法:if [ condition ]; thencommands fi
示例:检查文件是否存在:
if [ -f "file.txt" ]; thenecho "文件存在" fi
-
双分支if-else
语法:if [ condition ]; thencommands1 elsecommands2 fi
示例:判断数值大小:
if [ $num -gt 10 ]; thenecho "大于10" elseecho "小于等于10" fi
-
多分支if-elif-else
语法:if [ condition1 ]; thencommands1 elif [ condition2 ]; thencommands2 elsecommands3 fi
示例:成绩分级:
if [ $score -ge 90 ]; thenecho "优秀" elif [ $score -ge 60 ]; thenecho "及格" elseecho "不及格" fi
-
测试条件
- 数值比较:
-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
)。 - 每个分支以
;;
结束。
三、循环结构
-
for循环
- 遍历列表:
for item in apple banana cherry; doecho "水果: $item" done
- C语言风格:
for ((i=1; i<=5; i++)); doecho "数字: $i" done
- 遍历列表:
-
while循环
条件为真时执行:count=1 while [ $count -le 5 ]; doecho "计数: $count"((count++)) done
-
until循环
条件为假时执行(与while
相反):count=1 until [ $count -gt 5 ]; doecho "计数: $count"((count++)) done
-
循环控制
break
:跳出循环。continue
:跳过本次循环。
四、函数中的控制结构
函数内可嵌套控制语句:
check_even() {if [ $(($1 % 2)) -eq 0 ]; thenecho "偶数"elseecho "奇数"fi
}
check_even 4 # 输出"偶数"
五、注意事项
- 空格要求:
[ ]
内条件与括号需有空格(如[ $a -eq 10 ]
)。 - 字符串与数值:比较时区分运算符(如字符串用
=
,数值用-eq
)。 - 逻辑组合:使用
-a
(AND)、-o
(OR)或&&
、||
。
通过灵活组合这些结构,可高效实现自动化任务,如文件处理、系统监控等。