在Shell脚本中,流程控制语句用于根据条件执行不同的代码块。这些语句包括条件判断(如 if 语句)、循环(如 for、while 和 until 循环)以及跳转语句(如 break 和 continue)。
1.条件判断 - if 语句
if 语句用于基于条件执行不同的代码块。基本语法如下:
if else
if [ condition ]; then# 条件为真时执行的代码
fi# if else
if [ condition ]; then# 条件为真时执行的代码
else# 所有条件都不满足时执行的代码
fi# if elif else
if [ condition ]; then# 条件为真时执行的代码
elif [ another_condition ]; then# 另一个条件为真时执行的代码
else# 所有条件都不满足时执行的代码
fi
示例:
a=10
b=5if [ $a -eq $b ]; thenecho "a 等于 b"
elif [ $a -gt $b ]; thenecho "a 大于 b"
elseecho "a 小于 b"
fi
2.循环 - for 循环
for 循环用于重复执行一系列命令,直到指定的次数或列表中的所有元素都被处理完毕。基本语法如下:
for variable in list; do# 循环体
done
示例:
# 遍历数字
for i in 1 2 3 4 5; doecho "Number: $i"
done# 使用序列
for i in {1..5}; doecho "Number: $i"
done# 遍历文件
for file in *.txt; doecho "File: $file"
done
3.循环 - while 循环
while 循环用于在条件为真的情况下重复执行一系列命令。基本语法如下:
while [ condition ]; do# 循环体
done
示例:
count=1
while [ $count -le 5 ]; doecho "Count: $count"((count++))
done
4.循环 - until 循环
until 循环与 while 循环类似,但在条件为假的情况下重复执行一系列命令。基本语法如下:
until [ condition ]; do# 循环体
done
示例:
count=1
until [ $count -gt 5 ]; doecho "Count: $count"((count++))
done
5.跳转语句 - break 和 continue
break:立即退出当前循环。continue:跳过当前循环的剩余部分,并继续下一次迭代。
示例:
# 使用 break
for i in {1..10}; doif [ $i -eq 5 ]; thenbreakfiecho "Number: $i"
done# 使用 continue
for i in {1..10}; doif [ $((i % 2)) -eq 0 ]; thencontinuefiecho "Odd Number: $i"
done
6.案例语句 - case 语句
case 语句用于多分支选择,类似于其他语言中的 switch 语句。基本语法如下:
# case ... esac 为多选择语句,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case variable inpattern1)# 当 variable 匹配 pattern1 时执行的代码;;pattern2)# 当 variable 匹配 pattern2 时执行的代码;;*)# 默认情况;;
esac
示例:
fruit="apple"case $fruit in"apple")echo "It's an apple.";;"banana")echo "It's a banana.";;"orange")echo "It's an orange.";;*)echo "Unknown fruit.";;
esac