跳到主要内容

Shell 循环语句

Shell 同样支持循环语句,包括 for 循环和 while 循环两种形式。

for 循环

其中 for 循环格式如下:

for varible in list
do
commands
done

在 list 参数中,需要提供迭代中一系列要使用的值,在每个迭代中,varible 会包含列表中的当前值,一次使用一个值,以此类推。

数值型循环

以从 1 到 10 循环打印数字为例,for 语句的具体写法如下:

for i in {1..10}
do
echo $i
done

结合 seq 命令使用(seq 命令用于输出序列化的一串数字)

for i in $(seq 1 10)
do
echo $i
done

也可以采用类似 C 语言的写法(用双小括号包裹)

for ((i=1; i<=10; i++))
do
echo $i
done

字符型循环

循环打印字符串中的单词

fruit="apple banana orange"
for i in $fruit
do
echo $i
done

结合 shell 命令获取字符串列表

for i in `ls`
do
echo $i
done

while 循环

while 语句可以看成是 if-then 语句和 for 循环的混合。while 语句允许你定义一个要测试的命令,如果测试命令返回的退出状态码是 0,则循环执行一组命令。格式如下:

while test command
do
other commands
done

例如当 while 条件始终为真,即无限循环,在循环中不断播报时间:

#!/bin/bash

while true
do
date
sleep 1
done

上述 while 语句等效于

while :
do
date
sleep 1
done

通常,我们会为 while 语句增加判断条件

#!/bin/bash

count=10

while [ $count -gt 0 ]
do
date
sleep 1
((count--))
done

在 while 循环期间,可以使用 break 语句跳出循环

#!/bin/bash

count=10

while [ $count -gt 0 ]
do
date
sleep 1
((count--))

if [ $count -lt 3 ]; then
break
fi
done