(028) Linux之shell流控制——while和util循环

十年运维系列之基础篇 - Linux

作者:曾林 

联系:1494445739@qq.com

网站:www.jplatformx.com

版权:文章未经同意请勿转载


 

一、引言

  日常生活中充满了循环。每天上班、遛狗和切胡萝卜等都需要重复一系列的步骤。就比如用伪代码来描述切胡萝卜的过程,可能会是这样的。

  1. 取案板
  2. 取刀
  3. 把胡萝卜放在案板上
  4. 拿起刀
  5. 前移胡萝卜
  6. 切胡萝卜
  7. 若整根胡萝卜都切好了,就退出程序,否则继续从第4步开始操作。

  第4步到第7步构成了一个循环。循环中的动作会一直重复,直到条件“整根胡萝卜都切好了”为真。

 

二、while语句

  首先先展示一个支持while语句的shell脚本,取名为while-foo.sh。代码如下:

#!/bin/bash

# script to support while statement.

count=1

while (($count <= 5)); do
    echo $count
    ((count++))
done

echo "finish"

  while命令的语法结构如下:

  while commands; do commands; done

  就如同if命令一样,while会判断一系列指令的退出状态。只要退出状态为0,它就执行循环内的命令。上述脚本中,我们创建了count变量并赋予count初始值1。while命令会判断test命令的退出状态。只要test命令返回的退出状态为0,那么循环内的指令将继续执行。

 

三、跳出循环

  bash提供了两种可用于控制循环内部程序流的内建命令。其中break命令立即终止循环,程序从循环后的语句恢复执行。continue命令则会导致程序跳过循环剩余的部分,直接开始下一次循环迭代。

break  continue

 

四、until

  while命令是当command为真的时候执行,而until命令则正好相反,until是当命令失败的时候会一直运行,直到命令为真才终止循环。until语句的格式如下:

until commands; do 
  commands;
done

  下面展示了一个until命令来执行循环的例子:

#!/bin/bash

# Script to test 'until' statement

count=1

until (( $count > 5 )); do
    echo $count
    count=$((count+1))
done
echo "Finish."

 

五、使用循环读取文件

  while和until语句都可以用来处理标准输入,这让使用while和until循环处理文件成为可能。使用样例如下:

#!/bin/bash

# Script to test while statement to read file stream

while read var1 var2 var3; do
    printf "var1: %s\t var2: %s\t var3: %s\t" $var1 $var2 $var3
    echo ""
done < distros.txt

exit

  为将一份文件重定向到循环中,我们可在done语句之后添加重定向操作符。循环使用read命令读取重定向文件中的字段。在到达文件末端之前,退出状态为0。在读取过文件中的每一行之后,read命令退出,此时退出状态变为非0,循环终止。

  此外,还可以通过sort命令的输出并显示文本流。具体如下图:

  此脚本获取sort命令的输出并显示文本流。但是需要注意的是,因为管道是在子shell中进行循环操作。当循环终止时,循环内部新建的变量或者是对变量的赋值效果都会丢失。

 

posted @ 2015-03-19 10:17  jplatformx  阅读(522)  评论(0编辑  收藏  举报