while命令

while命令,也是一个循环命令,while后面后跟着一个条件,当满足条件(退出状态码为0)时,while内部会一直循环执行,直到直到while后面的条件不满足(退出状态码不为0)时,结束这个while循环。在编写时要注意死循环。示例如下:

shell 退出function shell 退出while_linux

执行结果如下:

shell 退出function shell 退出while_状态码_02

另外的,while后面可以跟多个命令,而最终决定while循环退出的是最后一个命令的退出状态码。

until命令

until命令和while命令刚好相反,即:until后面的命令返回的退出状态码不为零时,循环会一直执行,当until后面的命令的退出状态码为0时,则退出循环。until后面也可以跟多个命令,而最终决定while循环退出的是最后一个命令的退出状态码。示例如下:

shell 退出function shell 退出while_shell 退出function_03

这里使用了两个命令,第一个命令输出当前var的值,第二个命令的退出状态码会作为循环退出的依据,即var小于等于0时。执行结果如下:

shell 退出function shell 退出while_shell_04

注意最后打印的那个0,是echo $var打印的,由于var=0时,虽然循环不会再执行,但是最后会迭代一次来退出循环,所以until后面的命令还会执行一次,而由于最后一个命令的退出状态码为0,所以循环内部的命令不会再执行,最后退出循环。

另外的,之前所有的循环命令都可以根据自己的需要进行循环嵌套。同时还可以利用循环嵌套处理文件数据,对某文件中的数据逐行遍历,然后对行再进行遍历。在遍历过程中可以自己定义字段分隔符。

控制循环

  • break命令:退出整个循环
  • continue命令:退出某次循环

这两个命令和其他的编程语言用法一样,需要在循环内部使用,当达到某种条件时执行break或者continue。有一点需要注意,break和continue默认都是退出距离自己最近的一层循环,如果要退出多层循环,可以使用:

break n
# or
continue n

其中n代表要跳出的循环层数,默认情况下,n=1。

处理循环的输出

在shell脚本中,可以对循环的输出使用管道(|)或者重定向(>),可以通过在done命令之后添加一个命令来实现,实例展示重定向如下:

shell 退出function shell 退出while_linux_05

执行后,查看output1.txt文件内容如下:

shell 退出function shell 退出while_shell_06