【Shell 脚本速成】09、Shell 循环控制语句 for

news2024/10/8 17:21:57

目录

一、循环控制 break 语句

二、循环控制 continue 语句

三、循环控制 sleep

四、参数控制命令-shift

五、脚本退出命令 exit

总结

六、for 嵌套

6.1 for 嵌套 if

七、for 与数组

7.1 使用 for 循环遍历读出数组

7.2 使用 for 循环进行数组存值


 

一、循环控制 break 语句

作用: 终止循环,执行循环体后面的代码

案例:

循环打印输出数字1到9,当执行输出到5时终止循环。

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

echo "执行完毕"

[root@shell ~]# sh for-4.sh
1
2
3
4
5
执行完毕

跳出本次循环语句,继续执行后续代码:echo "执行完毕"

二、循环控制 continue 语句

作用: 跳过某次循环,继续执行下一次循环;表示循环体内下面的代码不执行,重新开始下一次循环。

案例:
循环打印输出数字1到9,当执行输出到5时跳过本次循环。

[root@shell ~]# vim for-5.sh
#!/bin/bash

for ((i=1;i<10;i++))
do
        if [ $i -eq 5 ];then
                continue
        else
                echo $i
        fi

done
echo "执行完毕"

[root@shell ~]# sh for-5.sh
1
2
3
4
6
7
8
9
执行完毕

跳过第5次循环,继续执行下一次(第6次)循环。 

三、循环控制 sleep

作用: 控制循环的节奏,控制循环频率

        当执行一个无限循环语句的时候,如果任意其循环那么该循环就会疯狂的消耗计算机的内存和CPU资源,消耗最大的就是CPU,所以一个循环不可能让其肆意循环,必须控制其循环的节奏,可以使用sleep语句来完成。

案例:
写一个倒计时程序:从9到1,每秒倒数一次。

[root@shell ~]# vim for-6.sh
#!/bin/bash

echo -n "倒计时: "
for i in `seq 9 -1 1`
do
      echo -n -e "\b$i"
      sleep 1
done

echo 
echo "执行完毕"


# sleep 单位秒

效果展示:

四、参数控制命令-shift

作用: 外部传参到循环时,参数管理命令

每次循环,使位置参数向左移动,默认移动1位,可以使用 shift 2 (移到两位),传参应是 N 的整数倍

案例:
通过外部传参的方式向脚本内的循环传递参数,要求打印每次循环使用的参数。

[root@shell ~]# vim for-7.sh
#!/bin/bash

# 判断外传参的数量
[ $# -lt 3 ]&&echo '请输入至少三个参数:'$0' $1 $2 $3 ...'&&exit 1

# 将参数的数量赋值给count
count=$#

# 通过shift左移参数输出
# 使位置参数向左移动,默认移动1位,可以使用shift 2 传参要是N的整数倍
for ((i=1;i<=$count;i++))
  do
    echo '参数数量: '$#''
    echo '当前$1的数值是: '$1''
    shift 1
    sleep 1
done
echo "执行完毕"

[root@shell ~]# sh for-7.sh 1 3 5 7 8 9 10
参数数量: 7
当前$1的数值是: 1
参数数量: 6
当前$1的数值是: 3
参数数量: 5
当前$1的数值是: 5
参数数量: 4
当前$1的数值是: 7
参数数量: 3
当前$1的数值是: 8
参数数量: 2
当前$1的数值是: 9
参数数量: 1
当前$1的数值是: 10
执行完毕

五、脚本退出命令 exit

作用: 退出程序并释放占用的系统资源

案例:
循环输出数字1-9,当循环到5时退出脚本。

[root@shell ~]# vim for-8.sh
#!/bin/bash

for i in `seq 1 9`
  do
      echo $i
      if [ $i -eq 5 ]
        then
           exit 0  
        fi
done
echo "执行完毕"

[root@shell ~]# sh for-8.sh 
1
2
3
4
5

总结

  • continue:退出本次循环,进入下一次循环
  • break:退出for循环,但是会执行for循环之外的代码
  • exit:退出整个程序

六、for 嵌套

6.1 for 嵌套 if

循环中需要判断

案例:
输出1-9,当输出5时停止输出

#!/bin/bash

for ((num=1;num<10;num++))
   do
     echo $num
     [ $num -eq 5 ]&& break
done

6.2 for 嵌套 for

循环中再有循环

案例:

打印99乘法表 

[root@shell ~]# vim for-9.sh
#!/bin/bash

for ((A=1;A<10;A++));do
        for ((B=1;B<=$A;B++));do
                echo -n -e "$B*$A=$((A*B))\t"
        done
        # 换行
        echo
done

[root@shell ~]# sh for-9.sh
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	

七、for 与数组

for 循环与数组

7.1 使用 for 循环遍历读出数组

[root@shell ~]# vim for-10.sh
#!/bin/bash

array=(a b c d e f g)
count=${#array[*]}

for ((i=0;i<$count;i++));do
        echo "array[$i]=${array[$i]}"
done

[root@shell ~]# sh for-10.sh
array[0]=a
array[1]=b
array[2]=c
array[3]=d
array[4]=e
array[5]=f
array[6]=g

7.2 使用 for 循环进行数组存值

[root@shell ~]# vim for-11.sh
#!/bin/bash

for ((i=0;i<5;i++));do
        read -p "char: " ch
        array[$i]=$ch
done

for ((i=0;i<5;i++));do
        echo "array[$i]=${array[$i]}"
done

[root@shell ~]# sh for-11.sh
char: 1
char: 2
char: 3
char: 4
char: 5
array[0]=1
array[1]=2
array[2]=3
array[3]=4
array[4]=5

上一篇文章:【Shell 脚本速成】08、Shell 流程控制——for 循环语句_Stars.Sky的博客-CSDN博客

参考文档:循环控制语句-组团学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix6.0使用教程 (一)—zabbix新增功能介绍2

上一篇我们已经介绍了部分zabbix6.0的新增功能&#xff0c;这期我们将继续为家详细介绍下余下的zabbix6.0新增功能&#xff0c;大家可以往下看。 六、监控项 6.1 自动类型选择 监控项配置表单会自动建议匹配的信息类型&#xff0c;如果选定的监控项键值仅返回特定类型的数据…

迷宫逃离的问题-CoCube

ROS1云课→20迷宫不惑之A*大法&#xff08;一种虽古老但实用全局路径规划算法&#xff09; 将CoCube分别放入如下地图中的左侧&#xff0c;如何从右侧逃离&#xff1a; 需要算法&#xff1a;求解起点到终点的路径。 还需要什么&#xff1f; 参考&#xff1a; &#xff08;eng.…

目标检测算法——垃圾分类数据集汇总(附下载链接)

&#x1f384;&#x1f384;近期&#xff0c;小海带在空闲之余收集整理了一批垃圾分类数据集供大家参考。 整理不易&#xff0c;小伙伴们记得一键三连喔&#xff01;&#xff01;&#xff01;&#x1f388;&#x1f388; 目录 一、Kaggle 垃圾分类图片数据集 二、垃圾分类数据…

全国青少年软件编程等级考试Python标准解读(1_6级)

考核性质&#xff1a; 全国青少年软件编程等级考试标准&#xff08;Python语言&#xff09;由中国电子学会科普培训与应用推广中心和北京大学信息科学技术学院共同制定。由全国青少年电子信息科普创新联盟标准工作组开发&#xff0c;由中国电子学会普及工作委员会审核通过&…

央视主持人康辉再次出圈,一口气播出一个多小时不卡顿、零失误

说起中央电视台的主持人&#xff0c;曾经有好几个国字脸&#xff0c;不过随着时间的流逝&#xff0c;他们都消失在历史的长河里。如今的央视主持人队伍&#xff0c;康辉可以算得上天花板级别的人&#xff0c;他也因此俘获了一大批观众&#xff0c;成为最受欢迎的主持人。 专业科…

阿里P5的测试开发工程师,都有哪些要求?

【北京】高德 高级测试开发工程师&#xff08;面议&#xff09; 职位描述&#xff1a; 1、负责高德信息服务核心服务端系统测试和质量保障体系建设&#xff1b; 2、为复杂高德信息-本地生活系统设计并执行高质量的综合测试方案&#xff1b; 3、通过多种技术手段实现高度自…

数据库常见死锁原因及处理

目录前言什么是死锁死锁产生的四个必要条件1. 表锁死锁死锁场景解决方案建议2. 行锁死锁2.1 两个事务分别想拿到对方持有的锁&#xff0c;互相等待&#xff0c;于是产生死锁死锁场景解决方案2.2 共享锁转换为排他锁死锁场景解决方案3. INSERT ... ON DUPLICATE KEY UPDATE产生d…

[附源码]Python计算机毕业设计Django疫情防控平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Watch事件介绍_java培训

Watch事件 Java培训课程 Watch事件 一次触发 当数据有了变化时zkserver向客户端发送一个watch,它是一次性的动作&#xff0c;即触发一次就不再有效&#xff0c;类似一次性纸杯。 只监控一次。如果想继续Watch的话&#xff0c;需要客户端重新设置Watcher。因此如果你得到一个w…

【Android Studio程序开发】按钮触控---按钮控件Button

除了文本视图之外&#xff0c;按钮Button也是一种基础控件。因为Button是由TextView派生而来&#xff0c;所以文本视图 拥有的属性和方法&#xff0c;包括文本内容、文本大小、文本颜色等&#xff0c;按钮控件均能使用。不同的是&#xff0c;Button拥有默认的按钮背景&#xff…

采购管理系统有什么用,哪个好?

如今随着各行各业的采购组织管理理念的不断变换&#xff0c;利用信息化手段来管理企业采购行为已然成为一种趋势。 现代采购管理系统可以使采购组织规范采购工作的组织实施&#xff0c;建立有责任感的管理体系&#xff0c;从而提高企业经济效益和采购质量&#xff0c;增强企业…

Linux搭建 FTP服务器

Linux搭建 FTP服务器 vsftpd 是 very secure ftp daemon 的缩写&#xff0c;它是 Linux 上使用最受欢迎、使用最广泛的 FTP 服务器之一&#xff0c;它具有安全&#xff0c;速度快&#xff0c;稳定的特点&#xff0c;很多重要的 FTP 站点比如 ftp.gnu.org、ftp.freebsd.org 都是…

【JavaWeb开发-Servlet】day03-URL参数传递与MySQL数据库连接

目录 1、登录示例&#xff0c;谁用url传递参数 &#xff08;1&#xff09;创建一个Servlet类&#xff0c;名字叫做loginServlet &#xff08;2&#xff09;保留需要的部分 &#xff08;3&#xff09;删除多余代码 &#xff08;4&#xff09;编写loginServlet.class &#xff08…

ICV:2022年中国车载摄像头市场规模有望突破50亿美元大关

全球前沿科技咨询机构ICV近期发布了全球车载摄像头的市场分析报告。ICV在报告中指出&#xff0c;车载摄像头市场随着乘用车自动驾驶的发展呈现出快速增长的趋势&#xff0c;2022年中国市场在全球范围内仍保持“市场领跑者”的地位&#xff0c;并有望突破50亿美元市场规模的大关…

Win10如何安装JDK1.8,最快最详细教程

JDK全称为Java Development Kit&#xff0c;顾名思义是java开发工具包&#xff0c;是程序员使用java语言编写java程序所需的开发工具包。 JRE全称为Java Runtime Environment&#xff0c;顾名思义是java运行时的环境&#xff0c;包含了java虚拟机&#xff0c;java基础类库&…

ABAP-SAP-整合事务码,整合平台,运维工具箱

PROCESS BEFORE OUTPUT. MODULE status_0100. * PROCESS AFTER INPUT. MODULE user_command_0100. MODULE exit_command_0100 AT EXIT-COMMAND. 源码&#xff1a; **Project Name : SAP Implementation Project **Program Name : ZTOOL **Description : 运维工具箱 **Date/Aut…

比羊了个羊还火的ChatGPT,玩法全攻略讲解

大家好&#xff0c;我是洋子&#xff0c;昨天听闻了ChatGPT&#xff0c;真的非常强大&#xff0c;赶紧给大家安利一波 ChatGPT是一种由OpenAI开发的通用聊天机器人模型 该模型是基于GPT-3&#xff08;一种大型语言模型&#xff09;构建的&#xff0c;旨在提供与人类更加自然的…

Pig4Cloud之登陆验证(二)发放token

上一篇介绍了客户端认证处理&#xff0c;那是令牌颁发的前提。这篇开始&#xff0c;我们就来研究下令牌颁发。 令牌颁发 授权服务器提供令牌颁发接口&#xff08;/oauth2/token&#xff09;&#xff0c;由客户端发起请求&#xff0c;授权服务器生成访问令牌&#xff08;acces…

常见的并发线程面试题

常见的并发面试题 一.进程与线程的区别? 进程是操作系统进行资源分配的最小单元&#xff0c;线程是操作系统进行运算调度的最小单元。进程中包含了线程&#xff0c;线程属于进程。进程的内存和资源是该进程下的线程所共享的。 二.创建线程的方式以及区别? 继承Thread类&am…

vue源码中的nextTick是怎样实现的

一、Vue.nextTick 内部逻辑 在执行 initGlobalAPI(Vue) 初始化 Vue 全局 API 中&#xff0c;这么定义 Vue.nextTick。 function initGlobalAPI(Vue) {//...Vue.nextTick nextTick; }可以看出是直接把 nextTick 函数赋值给 Vue.nextTick&#xff0c;就可以了&#xff0c;非常…