7.Shell 流程控制

7.Shell 流程控制

在Shell脚本中,流程控制语句用于根据条件执行不同的代码块。这些语句包括条件判断(如 if 语句)、循环(如 forwhileuntil 循环)以及跳转语句(如 breakcontinue)。

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.跳转语句 - breakcontinue

  • 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