您的位置:

Shell编程中常用的循环控制语句

一、for循环

for循环是Shell编程中最常用的循环控制语句之一,其基本语法如下:

for 变量名 in 循环列表
do
    循环体
done

其中,变量名用于保存每次迭代的值,循环列表可以是一组字符串或者一个命令的输出结果。例如:

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

上面的代码会输出1到5,每个数字一行。如果使用命令的输出结果进行循环,则需要使用反引号或者$(命令)的方式,例如:

for file in `ls /tmp`
do
    echo $file
done

for file in $(ls /tmp)
do
    echo $file
done

上面两个代码段都会输出/tmp目录下的文件名。

二、while循环

while循环是另一种常见的循环控制语句,其基本语法如下:

while 条件
do
    循环体
done

while循环会根据条件不断地执行循环体,直到条件不成立为止。例如:

i=1
while [ $i -le 5 ]
do
    echo $i
    i=$((i+1))
done

上面的代码会输出1到5,每个数字一行。

三、until循环

until循环是和while循环相似的一种循环控制语句,其语法如下:

until 条件
do
    循环体
done

与while循环相反的是,until循环会在条件成立之前不断地执行循环体,直到条件成立为止。例如:

i=1
until [ $i -gt 5 ]
do
    echo $i
    i=$((i+1))
done

上面的代码会输出1到5,每个数字一行。

四、break和continue语句

在循环中,有时候需要跳出循环或跳过某次循环,这时候可以使用break和continue语句。

break语句可以跳出当前的循环,例如:

for i in 1 2 3 4 5
do
    if [ $i -eq 3 ]
    then
        break
    fi
    echo $i
done

上面的代码会输出1和2,当$i等于3时跳出循环。

continue语句可以跳过当前的循环,直接开始下一次循环,例如:

for i in 1 2 3 4 5
do
    if [ $i -eq 3 ]
    then
        continue
    fi
    echo $i
done

上面的代码会输出1、2、4和5,当$i等于3时跳过本次循环。

五、案例:统计某个目录下的文件数和目录数

#!/bin/bash
dir=$1
if [ ! -d $dir ]
then
    echo "$dir is not a directory"
    exit 1
fi

file_count=0
dir_count=0

for file in $dir/*
do
    if [ -f $file ]
    then
        file_count=$((file_count+1))
    elif [ -d $file ]
    then
        dir_count=$((dir_count+1))
    fi
done

echo "File count: $file_count"
echo "Directory count: $dir_count"

上面的代码可以统计某个目录下的文件数和目录数,其中使用了for循环和if语句。