Linux命令之while Bash中的While循环

本文链接:http://codingstandards.iteye.com/blog/780524    (转载请注明出处)

 

用途说明

while循环是Shell中常用的语法结构,它与其他编程语言中的while有些类似,只是写法有些不一样罢了。

常用格式

格式一

while 条件;

do

    语句

done

格式二 死循环

while true

do

    语句

done

格式三 死循环

while :

do

    语句

done

格式四 死循环

while [ 1 ]

do

    语句

done

格式五 死循环

while [ 0 ]

do

    语句

done

使用示例

示例一

Bash代码  收藏代码
  1. COUNTER=0  
  2. while [  $COUNTER -lt 10 ]; do  
  3.     echo The counter is $COUNTER  
  4.     let COUNTER=COUNTER+1   
  5. done  

 

[root@jfht ~]# COUNTER=0 
[root@jfht ~]# while [  $COUNTER -lt 10 ]; do 
>     echo The counter is $COUNTER 
>     let COUNTER=COUNTER+1 
> done 
The counter is 0
The counter is 1
The counter is 2
The counter is 3
The counter is 4
The counter is 5
The counter is 6
The counter is 7
The counter is 8
The counter is 9
[root@jfht ~]#

 

这个while循环改用for循环更好些

Bash代码  收藏代码
  1. for ((COUNTER=0; COUNTER<10; ++COUNTER))  
  2. do  
  3.     echo The counter is $COUNTER  
  4. done  

 

[root@jfht ~]# for ((COUNTER=0; COUNTER<10; ++COUNTER)) 
> do 
>     echo The counter is $COUNTER 
> done 
The counter is 0
The counter is 1
The counter is 2
The counter is 3
The counter is 4
The counter is 5
The counter is 6
The counter is 7
The counter is 8
The counter is 9
[root@jfht ~]#

示例二

Bash代码  收藏代码
  1. while true  
  2. do  
  3.     date  
  4.     sleep 1  
  5. done  

 

[root@jfht ~]# while true 
> do 
>     date 
>     sleep 1 
> done 
2010年 10月 10日 星期日 16:35:22 CST
2010年 10月 10日 星期日 16:35:23 CST
2010年 10月 10日 星期日 16:35:24 CST
2010年 10月 10日 星期日 16:35:25 CST
2010年 10月 10日 星期日 16:35:26 CST
2010年 10月 10日 星期日 16:35:27 CST
Ctrl+C 
[root@jfht ~]#

 

示例三 读取输入

Java代码  收藏代码
  1. while read line  
  2. do  
  3.     echo $line  
  4. done  

 

[root@jfht ~]# while read line 
> do 
>     echo $line 
> done 
hello 
hello
world 
worldCtrl+D 
[root@jfht ~]#

 

实例四 处理命令行参数

文件 while_4.sh

Bash代码  收藏代码
  1. #!/bin/sh  
  2.   
  3. usage()  
  4. {  
  5.     echo "usage: $0 [-a] [-e <admin>] [-f <serverfile>] [-h] [-d <domain>] [-s <whois_server>] [-q] [-x <warndays>]"  
  6. }  
  7.   
  8. while getopts ae:f:hd:s:qx: option  
  9. do  
  10.         case "${option}" in  
  11.                 a) ALARM="TRUE";;  
  12.                 e) ADMIN=${OPTARG};;  
  13.                 d) DOMAIN=${OPTARG};;  
  14.                 f) SERVERFILE=$OPTARG;;  
  15.                 s) WHOIS_SERVER=$OPTARG;;  
  16.                 q) QUIET="TRUE";;  
  17.                 x) WARNDAYS=$OPTARG;;  
  18.                 \?) usage; exit 1;;  
  19.         esac  
  20. done  
  21.   
  22. echo "ALARM=$ALARM"  
  23. echo "ADMIN=$ADMIN"  

 

[root@jfht ~]# cat while_4.sh 
#!/bin/sh

usage()
{
    echo "usage: $0 [-a] [-e <admin>] [-f <serverfile>] [-h] [-d <domain>] [-s <whois_server>] [-q] [-x <warndays>]"
}

while getopts ae:f:hd:s:qx: option
do
        case "${option}" in
                a) ALARM="TRUE";;
                e) ADMIN=${OPTARG};;
                d) DOMAIN=${OPTARG};;
                f) SERVERFILE=$OPTARG;;
                s) WHOIS_SERVER=$OPTARG;;
                q) QUIET="TRUE";;
                x) WARNDAYS=$OPTARG;;
                \?) usage; exit 1;;
        esac
done

echo "ALARM=$ALARM"
echo "ADMIN=$ADMIN"

[root@jfht ~]# chmod +x while_4.sh 
[root@jfht ~]# ./while_4.sh 
ALARM=
ADMIN=
[root@jfht ~]# ./while_4.sh -a 
ALARM=TRUE
ADMIN=
[root@jfht ~]# ./while_4.sh -e hy 
ALARM=
ADMIN=hy
[root@jfht ~]#

问题思考

1. 为什么 while [ 0 ] 也会是死循环?

2. 怎么使用while read line从文件中读入数据?

相关资料

【1】BASH Programming - Introduction HOW-TO 7.3 While sample

【2】Audbel 语法单行BASH的无限while循环

【3】一个有很多while示例的英文网页 Bash While Loop Example

原文地址:https://www.cnblogs.com/Centaurus/p/3080049.html