shell中while语句的格式:

while  ; do


done


while 特殊用法一:

在while循环中经常用到break,continue循环控制语句。下面介绍下continue和break的用法

continue:提前进入下一轮循环,它一定是由于满足一定的条件而触发的,continue触发后,下面的代码段不再继续执行。

用下面的例子来解释:

实例:计算100以内奇数的和。

脚本内容如下:

#!/bin/bash
#
let SUM=0
let I=0
while [ $I -lt 100 ]; do
    let I++
    if [ $[$I%2] -eq 0 ]; then
       continue
    fi
    let SUM+=$I
done
echo $SUM
[root@dnsserver ~]# ./sum.sh 
2500



来看看continue上面的条件

if [ $[$I%2] -eq 0 ];
      continue

表示如果$I为偶数,在下面的代码不再执行,而是跳出本次循环,提前进入下一次循环。


break:提前退出循环

实例:计算1+2+3+..+1000,  当和大于5000时,退出循环,不再做加法运算

#!/bin/bash
#
declare -i SUM=0
for I in {1..1000}; do
    let SUM+=$I
    if [ $SUM -gt 5000 ]; then
       break
    fi
done
echo $I
echo $SUM
[root@dnsserver ~]# ./sum1000.sh   
100
5050


while特殊用法二:

while read LINE; do


done < /PATH/TO/SOMEFILE

while可以读取文件(done后面就是制定的文件)中的每一行内容,并保存到LINE这个变量中。


实例:判定/etc/passwd文件中用户是否为bash,如果是bash,则显示用户名

#!/bin/bash
FILE=/etc/passwd
while read LINE; do
   [  `echo $LINE | awk -F : '{print $7}'` == '/bin/bash' ] && echo $LINE | awk -F : '{print $1}'
done < $FILE

脚本执行结果:

[root@dnsserver ~]# ./bash.sh 
root
zenge
test