Skip to content
KARINKARIN
博客主页
项目总览
知识要点
捣鼓折腾
Git笔记
Excel修炼秘籍
github icon
  • 博客主页
    • 项目总览
          • Shell脚本笔记
            • Shell脚本介绍
              • Shell语法
                • Shell格式化输出
                  • Shell格式化输入
                    • Shell变量
                      • Shell数组
                        • Shell运算
                          • Shell流程控制---if判断语句
                            • Shell流程控制---for循环语句
                              • for 循环介绍
                                • for 语法
                                  • for 语法一
                                    • for 语法二 (C 格式 for 循环)
                                      • C 格式 for 循环双变量
                                      • 循环控制语句
                                        • sleep N
                                          • continue
                                            • break
                                            • 示例
                                            • Shell流程控制---while循环语句
                                              • Shell流程控制---until循环语句
                                                • Shell流程控制---case分支语句
                                                  • Shell函数
                                                    • Shell正则表达式
                                                      • Shell对文本的搜索---grep命令
                                                        • Shell对文件的操作---sed命令
                                                          • Shell对输出流的处理---awk命令
                                                            • Shell监控脚本
                                                              • Shell脚本---lamp环境安装

                                                            Shell流程控制---for循环语句

                                                            author iconkarincalendar icon2021年4月9日category icon
                                                            • 教程
                                                            tag icon
                                                            • shell
                                                            timer icon大约 3 分钟

                                                            此页内容
                                                            • for 循环介绍
                                                            • for 语法
                                                              • for 语法一
                                                              • for 语法二 (C 格式 for 循环)
                                                              • C 格式 for 循环双变量
                                                            • 循环控制语句
                                                              • sleep N
                                                              • continue
                                                              • break
                                                            • 示例

                                                            脚本再执行任务的时候,总会遇到需要循环执行的时候,比如说我们需要脚本每隔五分钟执行一次 ping 的操作,除了计划任务,我们还可以使用脚本来完成,那么我们就用到了循环语句。

                                                            # for 循环介绍

                                                            很多人把for循环叫做条件循环,或者 for-i-in。其实前者说的就是 for 的特性,for 循环的次数和给予的条件是成正比的,你让它循环 5 次,它就循环 5 次;后者说的是 for 的语法。

                                                            # for 语法

                                                            # for 语法一

                                                            for var in vlue1 value2 ......;do
                                                            	commands
                                                            done
                                                            
                                                            1
                                                            2
                                                            3

                                                            接下来看段代码吧,循环输出数字 1-9

                                                            [root@localhost ~]# cat for_1.sh
                                                            #!/bin/bash
                                                            for i in `seq 1 9`;do
                                                            	echo $i
                                                            done
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5

                                                            # for 语法二 (C 格式 for 循环)

                                                            for ((变量;条件;自增减运算));do
                                                            	commands
                                                            done
                                                            
                                                            1
                                                            2
                                                            3

                                                            还是刚才的循环输出数字 1-9

                                                            [root@localhost ~]# cat for_2.sh
                                                            #!/bin/bash
                                                            for ((i=1;i<10;i++));do
                                                            	echo $i
                                                            done
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5

                                                            补充

                                                            seq 命令:seq 命令可以输出连续的数字,或者输出固定间隔的数字,或者输出指定格式的数字。

                                                            命令格式如下:

                                                            [root@localhost ~]# seq [选项] 首数 步进 尾数
                                                            选项:
                                                            	-s	:指定输出的分隔符,默认为 \n,即默认为回车换行
                                                            	-w	:指定为定宽输出,不能和 -f 一起用
                                                            	-f	:按照指定的格式输出,不能和 -w 一起使用
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            [root@localhost ~ ]# echo `seq 1 5`			#1---5之间,默认步进为1的数字
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            [root@localhost ~ ]# echo `seq 10 -2 1`		#10---1之间,步进为-2的数字
                                                            10
                                                            8
                                                            6
                                                            4
                                                            2
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            6
                                                            7
                                                            8
                                                            9
                                                            10
                                                            11
                                                            12

                                                            # C 格式 for 循环双变量

                                                            [root@localhost ~ ]# vim for_3.sh
                                                            #!/bin/bash
                                                            for ((m=9,n=1;m>1,n<10;m--,n++));do
                                                            	echo -e "$m\t$n"
                                                            done
                                                            [root@localhost ~ ]# bash for_3.sh
                                                            9	1
                                                            8	2
                                                            7	3
                                                            6	4
                                                            5	5
                                                            4	6
                                                            3	7
                                                            2	8
                                                            1	9
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            6
                                                            7
                                                            8
                                                            9
                                                            10
                                                            11
                                                            12
                                                            13
                                                            14
                                                            15

                                                            # 循环控制语句

                                                            # sleep N

                                                            脚本执行到该步休眠 N 秒

                                                            看段代码吧

                                                            [root@localhost ~ ]# vim sllep.sh
                                                            #!/bin/bash
                                                            echo -n "倒计时:"
                                                            for i in `seq 9 -1 1`;do
                                                            	echo -n -e "\b$i"
                                                            sleep 1
                                                            done
                                                            echo
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            6
                                                            7
                                                            8

                                                            # continue

                                                            跳出循环中的某次循环

                                                            继续看代码,默认循环输出 1-9,但是使用 continue 跳过输出 5

                                                            [root@localhost ~ ]# vim continue.sh
                                                            #!/bin/bash
                                                            for ((i=1;i<10;i++));do
                                                            	if [ $i -eq 5 ];then
                                                            		continue
                                                            	else
                                                            		echo $i
                                                            	fi
                                                            done
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            6
                                                            7
                                                            8
                                                            9

                                                            # break

                                                            跳出循环继续执行后续代码

                                                            还是看段代码,默认循环输出 1-9,当输出到5的时候跳出循环

                                                            [root@localhost ~ ]# vim break.sh
                                                            #!/bin/bash
                                                            for i in `seq 1 9`;do
                                                            	echo $i
                                                            	if [ $i -eq 5 ];then
                                                            		break
                                                            	fi
                                                            done
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            6
                                                            7
                                                            8

                                                            # 示例

                                                            监控主机存活的脚本

                                                            [root@localhost ~ ]# vim ping.sh
                                                            #!/bin/bash
                                                            for ((;;));do
                                                            	ping -c1 $1 &> /dev/null
                                                            	if [ $? -eq 0 ];then
                                                            		echo -e "`date +"%F %H:%M:%S"`:$1 is \033[32m UP \033[0m"
                                                            	else	
                                                            		echo -e "`date +"%F %H:%M:%S"`:$1 is \033[31m Down \033[0m"
                                                            	fi
                                                            	sleep 5		#每隔5秒循环一次,生产环境建议1分钟以上
                                                            done
                                                            [root@localhost ~ ]# bash ping.sh 192.168.2.123
                                                            2021-2-7 13:32:21:192.168.2.123 is UP 
                                                            2021-2-7 13:32:26:192.168.2.123 is UP 
                                                            2021-2-7 13:32:31:192.168.2.123 is UP 
                                                            2021-2-7 13:32:36:192.168.2.123 is UP 
                                                            ^C
                                                            [root@localhost ~ ]# bash ping.sh 192.168.2.321
                                                            2021-2-7 13:33:13:192.168.2.321 is Down 
                                                            2021-2-7 13:32:18:192.168.2.321 is Down 
                                                            2021-2-7 13:32:23:192.168.2.321 is Down 
                                                            2021-2-7 13:32:28:192.168.2.321 is Down 
                                                            [root@localhost ~ ]# 
                                                            
                                                            1
                                                            2
                                                            3
                                                            4
                                                            5
                                                            6
                                                            7
                                                            8
                                                            9
                                                            10
                                                            11
                                                            12
                                                            13
                                                            14
                                                            15
                                                            16
                                                            17
                                                            18
                                                            19
                                                            20
                                                            21
                                                            22
                                                            23
                                                            edit icon编辑此页open in new window
                                                            上一页
                                                            Shell流程控制---if判断语句
                                                            下一页
                                                            Shell流程控制---while循环语句
                                                            MIT Licensed
                                                            Copyright © 2022 karin