Shell脚本-流程控制语句基本语法结构

101 阅读2分钟

在Shell脚本编程中,流程控制语句是构建复杂逻辑的关键。通过使用条件判断、循环和分支等流程控制语句,我们可以编写出更加智能和动态的脚本程序。本文将详细介绍Shell脚本中的几种主要流程控制语句的基本语法结构,并通过示例展示其应用。

一、条件判断语句(if-elif-else)

(一)基本语法

if [ condition ]; then
    # 当条件为真时执行的代码块
elif [ another_condition ]; then
    # 当另一个条件为真时执行的代码块
else
    # 当所有条件均为假时执行的代码块
fi

注意:[ ]实际上是test命令的简写形式,因此条件两边必须有空格。

示例:

#!/bin/bash

age=18

if [ $age -ge 18 ]; then
    echo "You are an adult."
elif [ $age -ge 12 ]; then
    echo "You are a teenager."
else
    echo "You are a child."
fi

(二)使用双括号进行数值比较

对于数值比较,可以使用(( ))来简化表达式。

if (( age >= 18 )); then
    echo "You are an adult."
fi

二、循环控制语句

(一)for循环

基本语法

for variable in list
do
    # 循环体
done

示例:

#!/bin/bash

for i in 1 2 3 4 5
do
    echo "Number: $i"
done

也可以遍历文件列表:

for file in *.txt
do
    echo "Processing $file..."
done

(二)while循环

基本语法

while [ condition ]
do
    # 循环体
done

示例:

#!/bin/bash

counter=1
while [ $counter -le 5 ]
do
    echo "Counter: $counter"
    ((counter++))
done

(三)until循环

until循环与while类似,但它的循环条件是“直到”某个条件为真为止。

基本语法

until [ condition ]
do
    # 循环体
done

示例:

#!/bin/bash

counter=1
until [ $counter -gt 5 ]
do
    echo "Counter: $counter"
    ((counter++))
done

三、case语句

case语句提供了一种多分支选择结构,适用于需要根据不同情况执行不同代码块的场景。

(一)基本语法

case expression in
    pattern1)
        # 当expression匹配pattern1时执行的代码块
        ;;
    pattern2)
        # 当expression匹配pattern2时执行的代码块
        ;;
    *)
        # 默认情况下的代码块
        ;;
esac

示例:

#!/bin/bash

fruit="apple"

case $fruit in
    apple)
        echo "It's an apple."
        ;;
    banana)
        echo "It's a banana."
        ;;
    *)
        echo "Unknown fruit."
        ;;
esac

四、流程控制命令

(一)break和continue

  • break:用于立即退出最内层的循环。
  • continue:用于跳过当前循环体剩余部分,直接进入下一次循环。

示例:

#!/bin/bash

for i in 1 2 3 4 5
do
    if [ $i -eq 3 ]; then
        continue # 跳过i等于3的情况
    fi
    if [ $i -eq 5 ]; then
        break # 当i等于5时退出循环
    fi
    echo "Number: $i"
done

(二)exit

exit命令用于终止当前脚本的执行,并可选地返回一个状态码给调用者。

示例:

#!/bin/bash

echo "Start of script."
exit 0 # 立即终止脚本,返回状态码0表示成功
echo "End of script." # 此行不会被执行

五、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!