for循环for循环可以用两种不同的方式编写:c风格的for循环;以及列表中使用的for循环。C语言风格的for循环如果你熟悉c或c++等编程语言,你应该对下面的循环很熟悉:for((initialize;condition;increment));do[COMMANDS]done根据上面的语法,我们写一个例子,打印十次HelloFriend:for((i=0;i<10;i++));doecho"HelloFriend"done上面代码中,首先将整型变量i初始化为0,然后设置循环条件(i<10)如果条件为真,则执行循环,打印HelloFriend,并自增变量i减1,然后执行下一个循环,直到不再满足i<10。$bashhello.shHelloFriendHelloFriendHelloFriendHelloFriendHelloFriendHelloFriendHelloFriendHelloFriendHelloFriendHelloFriend好友列表中使用的for循环是for循环的变体,在处理列表或数组时特别方便。其语法如下:foritemin[LIST];do[COMMANDS]done例如,让我们重写上面的例子:foriin{1..10};doecho"HelloFriend"done另一个例子,下面的脚本var.sh将打印/var目录下的所有文件和目录:#!/bin/bashforiin/var/*;doecho$idone执行,输出如下:$./var.sh/var/backups/var/cache/var/crash/var/lib/var/local/var/lock/var/log/var/mail/var/metrics/var/opt/var/run/var/snap/var/spool/var/tmpwhile循环while循环是bash中另一个广泛使用的循环。它的语法如下:while[condition];多个:#!/bin/bashnum=1while[$num-le10];doecho$(($numnum=$(($num+1))done执行结果如下:$36912151821242730在上面的脚本中,变量将num初始化为1,然后设置num小于等于的循环条件到10。在循环体内,打印num乘以3,然后将num递增1。存在于bash中。bush中存在另一种类型的循环,until循环,其语法与while循环相同:until[condition];doCOMMANDS]Doneuntil循环和while循环的主要区别在于循环条件。while循环在循环条件为真时继续,而until循环在循环条件为假时继续。比如我们上面写的3x10.sh脚本,我们使用until循环来实现,如下:#!/bin/bashnum=1until[$num-gt10];doecho$(($numnum=$(($num+1))done大家应该能注意到上面的循环条件是$num-gt10,也就是前面例子中-le的取反。具体应用循环的使用上面我们介绍了循环在bash中的用法,下面在实际例子中介绍一下循环的使用,打印数组的内容,在此之前,我们假设你了解bash中的数组。遍历数组,for循环通常是最重要的选择。在下面的脚本prime.sh中,会遍历并打印得到数组中的所有元素:#!/bin/bashprime=(2357111317192329)foriin"${prime[@]}";doecho$idone执行它,结果如下:$./prime.sh2357111317192329在循环中使用break和continue有时候我们可能想要提前退出循环,或者跳过这个循环。然后我们需要分别使用break和continue。break将终止循环并将程序控制转移到下一个命令或指令循环后的离子。例如,下面的循环只会打印1到3:for((i=1;i<=10;i++));doecho$iif[$i-eq3];然后使用continue语句的breakfidone会跳过本次循环,继续执行下一次循环。例如,以下脚本odd.sh将只打印从1到10的奇数,并跳过偶数:#!/bin/bashfor((i=0;i<=10;i++));doif[$(($i%2))-ne1];然后continuefiecho$idone执行结果如下:$./odd.sh13579无限循环无限循环就是永远运行下去的循环,它的循环条件永远为真。在大多数情况下,无限循环是逻辑错误导致的错误。例如,有人可能希望创建一个按降序打印数字1到10的循环,结果可能会错误地创建以下无限循环:for((i=10;i>0;i++));doecho$idone上面的错误是把i加1。要解决这个问题,我们需要把increment改为decrementi--:for((i=10;i>0;i--));doecho$idone在某些情况下,我们可能想故意创建无限循环,以等待系统满足外部条件。如下:for((;;));do[COMMANDS]done如果你想创建一个无限的while循环,你可以参考以下内容:while[true];做[命令]完成
