当前位置: 首页 > news >正文

shell脚本之双重循环(详解)

         双重循环是指在程序中嵌套使用两个循环结构,通常是嵌套使用两个for循环。双重循环可以用来遍历二维数组、二维矩阵等需要两个维度的数据结构,并且可以对其中的元素进行操作。

        双重循环的执行方式是外层循环执行一次,内层循环执行完整的循环体,然后再次回到外层循环,如此循环执行,直至外层循环完毕。

        在实际应用中,双重循环经常用于处理二维数组或嵌套数据结构。它可以用于遍历矩阵、搜索匹配项、计算累加值等等。双重循环的效率可能会比较低,因为它需要执行更多的迭代。因此,在设计算法时,需要权衡迭代次数和执行时间。

运用演示:

#!/bin/bash
for ((i=1; i<=9; i++))
dofor ((j=1; j<=9; j++))doresult=$((i*j))echo -n "$i*$j=$result "doneecho
done

执行示例

 例:使用for循环打印9 9乘法表

#! /bin/bash
for((i=1;i<=9;i++))
do
    for((j=1;j<=i;j++))
    do
        echo -n "$j * $i = $(($j*$i))  "
    done
    echo ""
done

运行图 

 循环的结束语句 

在shell脚本中,循环结束语句用于终止循环并跳出循环体。常用的循环结束语句有以下几种:

  1. break语句:用于终止当前循环。当执行到break语句时,程序将立即退出循环并执行循环后的语句。
  2. continue语句:用于终止当前迭代并进入下一次迭代。当执行到continue语句时,程序将跳过剩余的循环体代码,直接进入下一次循环。
  3. return语句:用于终止当前函数。当执行到return语句时,函数将立即返回并退出。return语句一般在函数内使用。

示例:

1.break

for i in {1..10}; do
  if [[ $i -eq 5 ]]; then
    break
  fi
  echo $i
done

运行结果

2.continue

for i in {1..10}; do
  if [[ $i -eq 5 ]]; then
    continue
  fi
  echo $i
done

运行结果

3.return

#!/bin/bash

laowang() {
  for i in {1..10}; do
    if [[ $i -eq 5 ]]; then
      return
    fi
    echo $i
  done
}
laowang
echo "Done"

运行结果 

双重循环之花式打印图形

1.实心矩形打印

# 定义矩形的宽度和高度
width=10
height=5

# 循环打印矩形
for ((i=1; i<=height; i++)); do
  for ((j=1; j<=width; j++)); do
    echo -n "#"
  done
  echo ""
done

2.空心矩形打印

#!/bin/bash

# 定义矩形的宽度和高度
width=10
height=5

# 循环打印矩形的第一行
for ((i=1; i<=width; i++)); do
  echo -n "#"
done
echo ""

# 循环打印矩形的中间行
for ((i=2; i<=height-1; i++)); do
  echo -n "#"
  for ((j=2; j<=width-1; j++)); do
    echo -n " "
  done
  echo "#"
done

# 循环打印矩形的最后一行
for ((i=1; i<=width; i++)); do
  echo -n "#"
done
echo ""

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 批量插入insert到SQLServer数据库,BigDecimal精度丢失解决办法,不动代码,从驱动层面解决
  • 《机器学习》—— PCA降维
  • ios xib 子控件约束置灰不能添加约束
  • 我发的共同一作,到底有没有用?
  • vue3 自定义指令 directive
  • 项目管理:如何确保目标的实现?
  • 基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统
  • 二层交换机和三层交换机的优缺点
  • 【LoRA】浅谈大模型微调之LoRA技术
  • 快速了解高并发解决方案
  • 如何在Oracle中实现数据的加密
  • 基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码
  • 安卓开发中LiveData的使用
  • 算法41:位1的个数
  • 【人工智能学习笔记】4_1 深度学习基础之深度学习概述
  • 《Java编程思想》读书笔记-对象导论
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • CSS相对定位
  • js面向对象
  • oschina
  • PHP 的 SAPI 是个什么东西
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Spark RDD学习: aggregate函数
  • SpingCloudBus整合RabbitMQ
  • 数据结构java版之冒泡排序及优化
  • 小而合理的前端理论:rscss和rsjs
  • 学习笔记TF060:图像语音结合,看图说话
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (ibm)Java 语言的 XPath API
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三分钟)速览传统边缘检测算子
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)Neo4j下载安装以及初次使用
  • (转)大型网站架构演变和知识体系
  • (转载)Google Chrome调试JS
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @ConfigurationProperties注解对数据的自动封装
  • @EnableWebMvc介绍和使用详细demo
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析