Shell 编程7(循环语句while)

while 结构:

while循环语句也称前测试循环语句,它的循环重复执行次数,是利用一个条件来控制是否继续重复执行这个语句。while语句与for循环语句相比,无论是语法还是执行的流程,都比较简明易懂。while循环格式如下:

                   while expression

                   do

                         command

                         command

                         …

                   done

while循环语句之所以命名为前测试循环,是因为它要先判断此循环的条件是否成立,然后才作重复执行的操作。也就是说,while循环语句执行过程是:先判断expression的退出状态,如果退出状态为0,则执行循环体,并且在执行完循环体后,进行下一次循环,否则退出循环执行done后的命令。

为了避免死循环,必须保证在循环体中包含循环出口条件,即存在expression的退出状态为非0的情况。


1 计数器形式的 while

假定该种情形是在已经准确知道要输入的数据或字符串的数目,在这种情况下可采用计数器控制的while循环结构来处理。这种情形下while循环的格式如下所示:

                               counter = 1

                              while expression

                            do

                                     command

                                     …

                                    let commandto operate counter

                                    command

                                     …

                           done

#!/bin/bash
i=0
sum=0
while (( i < 10 ))
do
 echo "i: $i, sum: $sum"
 let "sum+=$i"
 let "i++"
done

在Linux Shell编程中很多时候不知道读入数据的个数,但是可以设置一个特殊的数据值来结束while循环,该特殊数据值称为结束标记,其通过提示用户输入特殊字符或数字来操作。当用户输入该标记后结束while循环,执行done后的命令。在该情形下,while循环的形式如下所示:

                             read variable

                             while [["$variable" != sentinel ]]

                             do

                                   readvariable

                             done

#!/bin/bash
echo "enter a number:"
read var
while [ $var != "bye" ]
do
 echo "your input is : $var"
 read var
done

有时需要使用命令行来指定输出参数和参数个数,这时用其他的三种形式的while循环是无法实现的,所以需要使用命令行控制的while循环。该形式下,while循环通常与shift结合起来使用,其中shift命令使位置变量下移一位(即$2代替$1,$3代替$2),并且使$#变量递减,当最后一个参数也显示给用户后,$#就会等于0,同时$*也等于空,下面是该情形下,while循环的形式为:

                                 while [["$*" != "" ]]

                                 do

                                        echo"$1"

                                       shift

                                 done

eg

#!/bin/bash
while [ "$*" != "" ]
do
 echo "$1"
 shift
done
运行结果

anders@anders-virtual-machine:~/code/shell/while$ ./while3.sh 1 2 3 
1
2
3







  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值