zoukankan      html  css  js  c++  java
  • While & For 循环

    While 循环

    可以将 While 循环称为 "条件循环"

    While 循环语法

    # 条件为 true 就执行循环体代码,条件变为 false 循环结束
    while 条件
    do
        命令1
        命令2
        命令3
        ...
    done
    
    # 示例
    #!/bin/bash
    
    count=0
    
    while [ $count -lt 5 ]  
    do
        echo $count 
        let count++  # 5
    done
    

    Until 循环语法

    # 条件为 false 就执行循环体代码,条件变为 true 循环结束
    until 条件
    do
        命令1
        命令2
        命令3
        ...
    done
    
    # 示例
    #!/bin/bash
    
    count=0
    
    until [ $count -eq 5 ]   
    do
        echo $count 
        let count++  # 5
    done
    

    While 循环关键字

    Break:立即终止本层循环

    Continue:终止本次循环

    #!/bin/bash
    
    count=0
    
    while [ $count -lt 5 ]  # 1 < 5
    do
        if [ $count -eq 3 ];then
            # break
            let count++
            continue
        fi
        echo $count 
        let count++  # 3
    done
    

    总结:结束 while 循环的两种方案

    ①. — 在循环体代码中把某个值改掉,让 While 循环条件变为假

    [root@zzzwqh wqh05]# cat test.sh 
    #!/bin/bash
    
    count=0
    while [ $count -lt 3 ]
    do
        echo 1111
        count=100
        echo 2222
        echo 3333
    
    done
    
    # 此时循环体内代码会执行完,之后结束脚本
    [root@zzzwqh wqh05]# ./test.sh  
    1111
    2222
    3333
    [root@zzzwqh wqh05]# 
    

    ②. — break,直接退出本层 While 循环

    [root@zzzwqh wqh05]# cat test.sh 
    #!/bin/bash
    
    count=0
    while [ $count -lt 3 ]
    do
        echo 1111
        #count=100
        break
        echo 2222
        echo 3333
    
    done
    
    # 此时循环体内代码不会执行完,break 后的代码不会执行
    [root@zzzwqh wqh05]# ./test.sh 
    1111
    [root@zzzwqh wqh05]# 
    

    ③. — 延伸,多层嵌套时,设置相同 While 循环条件,退出循环时,一起退出

    # 正常情况下,break 结束嵌套多层的循环,要写很多层
    while 条件1
    do
    	while 条件2
        do
            while 条件3
            do
            	break  
            done
            break
        done
        break
    done
        
        
    # 把条件改为 false
    tag=true
    while $tag
    do
    	while $tag
        do
            while $tag
            do
            	tag=false
            done
        done
    done
    

    While 循环示例

    Wget 测试网络

    [root@zzzwqh wqh05]# cat check_web.sh 
    #!/bin/bash
    
    [ $# -ne 1 ] && echo "只能输入一个参数" && exit
    
    url=$1
    count=0
    
    while true
    do
        echo "=========>$count"
        if [ $count -eq 3 ];then
            echo "报警:$url is dead"
            break
        fi
        
        wget --timeout=1 --tries=3 $url -q
        if [ $? -eq 0 ];then
            echo "$url is ok"
            break
        else
    	let count++        
        fi
    done
    [root@zzzwqh wqh05]# 
    
    [root@zzzwqh wqh05]# ./check_web.sh 
    只能输入一个参数
    [root@zzzwqh wqh05]# ./check_web.sh www.baidu.com
    =========>0
    www.baidu.com is ok
    [root@zzzwqh wqh05]# ./check_web.sh www.zzzwqh.com.cn
    =========>0
    =========>1
    =========>2
    =========>3
    报警:www.zzzwqh.com.cn is dead
    

    读取文件按行打印

    [root@zzzwqh wqh05]# cat 6.sh
    #!/bin/bash
    
    while read line
    do
        echo $line
    done < a.txt
    [root@zzzwqh wqh05]# ./6.sh 
    11111 1:1 1
    22222
    3333
    4444
    [root@zzzwqh wqh05]# 
    

    动态监测系统状态

    [root@zzzwqh ~]# while :;do free;sleep 0.5;clear;done
    

    For 循环

    可以将 For 循环称为 "取值循环"

    Shell 风格语法

    for i in value1 value2 value3
    do
        echo $i
    done
    
    # 示例
    [root@zzzwqh wqh05]# cat example.sh 
    #!/bin/bash
    
    for i in "aaa" 222 "ccc"
    do
        echo $i
    done
    
    # 取范围
    [root@zzzwqh wqh05]# example.sh
    #!/bin/bash
    
    for i in {5..1}
    do
       echo $i
    done
    
    for i in {a..z}
    do
       echo $i
    done
    

    C 语言风格语法

    # 语法格式
    #!/bin/bash
    for ((i=0;i<3;i++))
    do
        echo "命令1"
        echo "命令2"
        echo "命令3"
    done
    

    Break & Continue 适用于 For 循环

    # A-Z 忽略 C
    [root@zzzwqh wqh05]# cat 9.sh 
    #!/bin/bash
    
    for i in {A..Z}
    do
       if [ $i == "C" ];then
         # break
         continue
       fi
       echo $i
    done
    [root@zzzwqh wqh05]# 
    

    For 循环示例

    统计指定目录下文件的类型

    [root@k8s-master 828]# cat file_type_sum.sh
    #!/bin/bash
    path=$1
    block_type=0
    regular_type=0
    symbolic_type=0
    directory_type=0
    character_type=0
    
    [ $# -ne 1 ] && echo "需要指定一个目录" && exit
     
    for i in `ls $path`
    do
        [ -b /$path/$i ] && let block_type++
        [ -L /$path/$i ] && let symbolic_type++
        [ -d /$path/$i ] && let directory_type++
        [ -f /$path/$i ] && let regular_type++
        [ -c /$path/$i ] && let character_type++
    done
    
    
    echo "块文件:$block_type"
    echo "普通文件:$regular_type"
    echo "软链接文件:$symbolic_type"
    echo "目录文件:$directory_type"
    echo "字符设备文件:$character_type"
    
    记录成长过程
  • 相关阅读:
    vs中无法找到头文件
    c++ vector 用法
    c++ queue 用法
    c++ 中 毫秒级时间获取
    vs2013 boost signals
    vs2013环境下boost配置
    C++ static 用法
    fopen()和fclose()
    删除字符串尾的回车符
    WaitForSingleObject()
  • 原文地址:https://www.cnblogs.com/zzzwqh/p/13578860.html
Copyright © 2011-2022 走看看