• SHELL中的循环语句


    快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

    循环结构

    连续出现的功能性代码

    shell循环有四种:

    • while 条件成立,循环就开始 直到循环条件不满足或者跳出结构为止

    • until 和while循环恰恰相反 条件不成立 循环开始 ;条件成立 循环结束

    • for

    • select

    while 和 for 较为常用

    while

    主要用于程序的后台运行,需要持续运行的守护进程
    while是一个循环语句,在某个条件为真的情况下重复执行特定的代码块。在shell中,while语句通常用于重复执行一系列命令,直到某个条件不再成立。

    while [ 条件表达式 ]
    	do
    		代码
    done
    -------------------------------------
    if [ 条件表达式 ]
    	then
    		代码
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    案例演示:
    #!/bin/bash
    num=1
    while [ "$num" -lt 10 ]
        do
           uptime >> /baizhi/uptime2.log # 打印系统的负载
            sleep 3 #休眠三秒继续执行
            ((num=num+1))
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    ###
    	指令 & ## 将进程放到后台运行
    例如:
    	bash load1.sh &
    ###
    	fg jobId   #将指定进程拉回到前台
    例如:
    	fg 1
    jobs -l ## 查看后台正在运行的进程
    例如:
    	[1]+ 2165 运行中 bash load1.sh &
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    ## 计算 1+2+3+4+...+99+100
    #! /bin/bash
    sum=0
    num=1
    while [ $num -le 100 ]
    	do
    		((sum=sum+num))
    		((num++))
    done
    # echo 是打印技术内容以后自动换行
    echo "1~100的和为: $sum"
    printf "1~100的和为:$sum \n"  # printf  默认不换行  \n---换行符
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    printf指令
    printf 在脚本中应用的比 echo 更广泛 ----- 可移植性强
    语法:
    	printf 格式 展示的数据
    printf使用文本或者空格分隔参数,也可以使用格式化字符串 还可以指定字符串的宽度,左右对其的方式
    默认不换行 想换行 可以手动添加特殊字符 \n --- 换行符
    
    • 1
    • 2
    • 3
    • 4
    • 5
    ##参数
    	%s 格式替换符 输出一个字符串
    	%c 格式替换符 输出一个字符
    	%d 格式替换符 整型输出
    	%f 格式替换符 输出小数
    %-10s 指一个宽度为10的字符 (- 表示左对齐 没有则表示右对齐) 任何字符都会被显示在10个字符的宽度内
    如果内容不够10个字符,使用空格填充 若内容超过10个字符 超过也会将内容显示出来(格式会乱)
    %-4.1f 指格式化小数 其中 %-4 代表左对齐 显示在4个字符的宽度内 .1 是指小数点后保留一位
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    until

    不满足条件,执行 ; 满足条件跳出循环结构
    until是一个流程控制结构,它在执行一系列命令之前重复执行一个命令,直到该命令的退出状态为真(0)为止。

    [root@centos-128 abc]# cat until.sh
    #! /bin/bash
    num=1
    until [ $num -gt 10 ]
        do
            echo "HelloWorld"
            ((num++))
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    for
    写法 1:
    for 变量 in 变量取值的列表
    	do
    		代码
    done
    执行流程:
    	变量代表分别获取每个值 值取完了 结构退出
    写法2:
    	for ((expr1;expr2;expr3))
    	for ((变量初始化定义;设置变量的取值范围;变量递增递减))
    类似于C语言
    	for(int i=0;i<=10;i++)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    案例:
    # 打印1-10
    方法一:
    #! /bin/bash
    for var in 1 2 3 4 5 6 7 8 9 10
    	do
    		echo $var
    done
    方法二:
    for var in {1..10}
    	do
    		echo $var
    done
    方法三:
    for var in `seq 10`
    	do
    	echo $var
    done
    
    ## 计算 1+2+3+4+...+99+100
    
    sum=0
    for var in {1..100}
    	do
    		((sum=var+sum))
    done
    echo "1~100的和为 $sum"
    # 打印1-10
    for ((num=1;num<=10;num++))
    	do
    		echo $num
    done
    
    ## 列出某个目录下的文件
    #! /bin/bash
    for file in `ls /baizhi`
    	do
    	echo $file
    done
    ## 列出某个文件夹下所有的文件(包含子文件夹内部的文件)
    [root@centos-128 abc]# cat for1.sh
    #!/bin/bash
    function file_list(){
    for file in `ls $1`
        do
            if [ -f "$file" ]
                then
                    echo "$1/$file"
            else
                file_list "$1/$file"
            fi
    done
    }
    file_list $1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    循环控制
    中断循环:
    办法1:
    	循环条件不满足
    办法2:
    	break 中断循环
    	continue 直接中断本次循环,进入下一次
    	exit 退出脚本,退出当前shell
    	return 用在函数中 结束函数的作用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    break

    break 关键字 break n [n代表跳出的循环层数]

    [root@centos-128 abc]# cat break.sh
    #!/bin/bash
    for i in {1..10}
        do
            if [ $i -le 6 ]
                then
                    echo "HelloWorld   $i"
            else
                break
            fi
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    #! /bin/bash
    for var in {1..10} # 外层循环
    	do
    		echo "外层循环的执行"
    		for tmp in {1..10}
    			do
    				if [ $tmp -le 6 ]
    					then
    						printf "$tmp "
    				else
    					break 2 ## 跳出第二层循环
    				fi
    		done
    		printf "\n"
    done
    
    执行结果:
    [root@baizhi baizhi]# bash break2.sh
    外层循环的执行
    1 2 3 4 5 6
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    continue

    contine 跳过本次循环,直接进入下一次循环

    [root@centos-128 abc]# cat continue.sh
    #! /bin/bash
    for i in {1..10}
        do
            if [ $i -eq 6 ]
                then
                    continue
            else
                echo "HelloWorld  $i"
            fi
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    FT2000/4查看CPU温度以及频率
    PHP之内置web服务器
    二叉树基础总结
    CMMI认证如何评估
    AI项目十六:YOLOP 训练+测试+模型评估
    C++——右值引用、移动构造函数、move函数、完美转发
    一文读懂车载监控系统中的数据标注类型丨曼孚科技
    一文读懂 Linux 网络 IO 模型
    Spring Cloud Gateway 路由构建器的源码分析
    CPU、GPU、NPU的区别
  • 原文地址:https://blog.csdn.net/weixin_52198548/article/details/134469192