一、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语句。