Linux shell 一一 while 命令与until命令

前言

while命令某种意义上是 if-then语句和for循环的混合体。while命令允许定义一个要测试的命令,然后在循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。在test命令返回非零退出状态码时,while命令会停止执行那组命令。

while 的基本格式

while命令的格式是:
while test command
do
  other commands
done

从上面的格式上看,while命令中定义的test command 和 if-then语句中的格式一模一样。while命令的关键在于所指定的test command的退出状态码必须随着循环中运行的命令而改变。如果退出的状态码不改变,while循环将一直不停的进行下去。

最常见的test command的用法用方括号来检查循环命令中用到的shell变量的值,例如:

#! /bin/bash

#while command test

var1=10
while [ $var1 -gt 0 ]
do
   echo "$var1"
   var1=$[ $var1 -1 ]
done

输出结果:
在这里插入图片描述
while 命令的定义了每一次迭代时的检查的测试条件:

while [ $var1 -gt 0 ]

只要测试条件成立,while命令就会不停地循环执行定义好的命令。在这些命令中,测试条件中用到的变量必须修改,否则就会陷入无限的循环中。我们用shell算术来将变量减一:

var1=$[ $var1 -1 ]

while 循环会在测试条件不成立时停止。

C语言风格的 while循环的通用形式如下:

while (expression)
    statement

statement部分可以是以分号结尾的简单语句,也可以是用花括号起来的复合语句。expression 部分都使用关系表达式。也就是说,expression是值之间的比较,可以使用任何表达式。如果expression为真,执行statement部分一次,然后再次判断expression。

#include <stdio.h>

int main(int agrc, char **argv)
{
  int i = 10;
	while (i > 0)  
	{
	    
	   printf("%d\n",i);
	   i--;
	}

  return 0;
}

while 循环是使用入口条件循环。所谓 “有条件”指的是语句部分的执行取决于测试表达式描述的条件,例如:(i > 0)。该表达式是一个入口条件,因为满足条件才能进入循环体。

扫描二维码关注公众号,回复: 8942314 查看本文章

until命令

until命令和while命令工作的方式完全相反。until命令要求你的指定一个通常返回非零退出状态码的测试命令。只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。一旦测试命令返回了退出状态码0,循环就结束了。

until test commands
do
   other commands
done

和while命令类似,你可以在until命令语句中放入多个测试命令。只有最后一个命令的退出状态码决定了bash shell是否执行了定义的other commands

until命令的例子:

#! /bin/bash

#using the until command

var1=100
until [ $var1 -eq 0 ]
do
    echo "$var1"
    var1=$[ $var1 -25 ]
done

输出结果:
在这里插入图片描述
本例中测试var1变量来决定until循环何时停止。只要该变量的值等于0,until命令就会停止循环。同while命令一样,在until命令中使用多个测试命令是要注意。

#! /bin/bash

#using the until command

var1=100

until echo "$var1"
      [ $var1 -eq 0 ]
do
    echo "Inside the loop: $var1"
    var1=$[ $var1 -25 ]
done

输出结果:
在这里插入图片描述

总结

while命令使用普通命令或测试命令提供了基于命令条件的循环。until命令提供了迭代命令的一种方法,但它的迭代建立在命令产生非零退出的状态的基础上。

参考:Linux命令行与shell脚本编程大全

发布了71 篇原创文章 · 获赞 42 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chen1415886044/article/details/103208497
今日推荐