zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    DELETE和DELETE FROM有什么区别
    [转]DBA,SYSDBA,SYSOPER三者的区别
    DML语言练习,数据增删改查,复制清空表
    Oracle数据库sys为什么只能以sysdba登录
    Oracle添加数据文件创建表空间,创建用户代码
    ORACLE建表练习
    全局唯一标识符(GUID)
    [转]Java总结篇系列:Java泛型
    Strategy模式
    Android 第三方应用广告拦截实现
  • 原文地址:https://www.cnblogs.com/Centaurus/p/3080049.html
Copyright © 2011-2022 走看看