Unix shell for循环是一种常见的循环控制结构,它可以用来重复执行一个或多个命令。它的基本语法如下:
for variable in list do command1 command2 ... done
其中,list 是一个由逗号分隔的值列表,variable 是一个变量,command1 和 command2 是要执行的命令。在 for 循环中,每次迭代时都会将 list 中的值赋值给 variable,然后执行命令。
Unix shell for循环可以用来遍历文件、目录或者其它数据集合。例如,可以使用 for 循环来遍历当前目录中的文件:
for file in *; do echo $file; done
上面的代码会遍历当前目录中的所有文件并将文件名打印出来。此外,还可以使用 for 循环来遍历数字序列:
for i in {1..10}; do echo $i; done
上面的代码会遍历 1 到 10 的数字序列并将数字打印出来。此外,还可以使用 for 循环来遍历字符串序列:
for char in 'hello world'; do echo $char; done
上面的代码会遍历 hello world 这个字符串并将每个字母打印出来。总之,Unix shell for循环是一个强大而有用的工具,能够帮助我们快速地实现很多常见的功能。
到目前为止你已经学习过创建循环以及用循环来完成不同的任务。有时候你需要停止循环或跳出循环迭代。
在本教程中你将学到以下语句用于控制 Shell 循环:
所有循环都有一个有限的生命周期。当条件为假或真时它们将跳出循环,这取决于这个循环。
一个循环可能会由于未匹配到适合得条件而无限执行。一个永远执行没有终止的循环会执行无数次。因此,这种循环被称为无限循环。
这是一个使用 while 循环显示数字 0 到 9 的简单的例子:
#!/bin/sh
a=10
while [ $a -ge 10 ]
do
echo $a
a=`expr $a + 1`
done
这个循环将永远持续下去,因为 a 总是大于或等于 10,它永远不会小于 10。所以这正是无限循环的一个恰当的例子。
所有在 break 语句之前得语句执行结束后执行 break 语句,break 语句用于跳出整个循环。然后执行循环体后面的代码。然后在循环结束后运行接下来的代码。
以下 break 语句将用于跳出一个循环:
break
break 语句也可以使用这种格式来退出嵌套循环式:
break n
在这里 n 指定封闭循环执行的次数然后退出循环。
这里是一个简单的例子,用来说明只要 a 变成 5 循环将终止:
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
这会产生以下结果:
0
1
2
3
4
5
这里是一个简单的嵌套 for 循环的例子。如果 var1 等于 var2 以及 var2 等于 0 ,则这个脚本将跳出这个双重循环:
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
这会产生以下结果。在内循环中,有一个 break 命令,其参数为 2。这表明,你应该打破外循环和内循环才能满足条件。
1 0
1 5
continue 语句类似于 break 命令,二者不同之处在于,continue 语句用语结束当前循环,能引起当前循环的迭代的退出,而不是整个循环。
这个语句在当程序发生了错误,但你想执行下一次循环的时候是非常有用的。
continue
正如 break 语句,一个整型参数可以传递给 continue 命令以从嵌套循环中跳过命令。
continue n
在这里 n 指定封闭循环执行的次数然后进入下一次循环。
下面是使用 continue 语句的循环,它返回 continue 语句并且开始处理下一个语句:
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
这会产生以下结果:
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
背景早在 2007 年 11 月,为了系统地学习和总结 Shell 编程,作者专门制定了一个 Shell 编程范例的总结计划,当时的计划是:这个...
Nginx 的作者为追求极致的高效,自己实现了很多颇具特色的 Nginx 风格的数据结构以及公共函数。比如,Nginx 提供了带长度的字符...
1、在使用 findstr 我 你 他 test.txt 的时候,并不能查找到内容,但是,加上开关 /i 或者 /r 之后就正确无误了,可能是在查...
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 ...
基本语法docker [OPTIONS] COMMAND [arg...]一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器。可以...
验证IPv4/IPv6双协议栈本文分享了如何验证IPv4/IPv6双协议栈的Kubernetes集群。在开始之前提供程序对双协议栈网络的支持(云供应...
示例:使用PersistentVolumes部署WordPress和MySQL本示例描述了如何通过Minikube在Kubernetes上安装WordPress和MySQL。这两个应...