SHELL-双重循环习题练习
1.99乘法表
#!/bin/bash
#99乘法表for ((second=1; second<=9; second++))
dofor ((first=1; first<=second; first++))do echo -n -e "${first}*${second}=$[first*second]\t" done echo ''
done
#########
首先定义了一个外循环变量second,初始值为1,循环条件是second小于等于9。
在外循环内部,定义了一个内循环变量first,初始值为1,循环条件是first小于等于second。4
在内循环内部,使用echo命令输出"first*{second}=[first*second]\t",其中[first*second]表示计算first和second的乘积。
在内循环结束后,使用echo命令输出一个空行。
最后结束外循环。
2.等腰三角 图形拼接的方式
#!/bin/bash
#等腰三角 图形拼接的方式#控制三角形的行数
for ((a=1; a<=9; a++))
do#输出空格倒三角for ((i=9; i>a; i--))doecho -n " "done#输出正直角三角for ((b=1; b<=a; b++))doecho -n "*"done#输出小一号的正直角三角,第一行不输出*for ((c=1; c<a; c++))doecho -n "*"done#每行换行echo ""
done
################
第一个内层循环用于输出空格,以形成倒三角形的形状。它从9开始递减到当前行数a,每次输出一个空格。
第二个内层循环用于输出正直角三角形的星号(*)。它从1递增到当前行数a,每次输出一个星号。
第三个内层循环用于输出小一号的正直角三角形的星号(*),但第一行不输出星号。它从1递增到当前行数a-1,每次输出一个星号。

3.通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
#!/bin/bash
#通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件length=$(echo $PATH | awk -F: '{print NF}')
path=$PATHfor ((i=1; i<=length; i++))
dofolder=${path%%:*}path=${path#*:}find $folder -type dfiles=$(find $folder -type f)for j in $filesdoif [ ! -x $j ];thenecho "$j 为不执行文件"fidonedone
##############
获取PATH环境变量中包含的目录数量,赋值给变量length。
将PATH环境变量的值赋给变量path。
使用for循环遍历每个目录。
在每次循环中,提取path中的第一个目录,赋值给变量folder。
更新path,去掉已经提取的目录。
使用find命令查找当前目录下的所有子目录。
使用find命令查找当前目录下的所有文件,并将结果赋值给变量files。
使用for循环遍历files中的每个文件。
判断当前文件是否为不可执行文件,如果是,则输出文件名。

4.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#!/bin/bash
#写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。#店数的变量
n=1
#购物总额的变量
sum=0
while true
doecho "来到第${n}家商店的门口"read -p "是否进店逛逛?(yes/no)" doinguntil [ "$doing" == "no" ]doecho -e "欢迎光临!\n1:衣服¥500\n2:裤子¥400\n3:鞋子¥300\n4:帽子¥200\n5:袜子¥100\n6:放弃购买"read -p "请选择需要购买的商品序号:" numcase $num in1)echo "衣服购买成功"let sum+=500;;2)echo "裤子购买成功"let sum+=400;;3)echo "鞋子购买成功"let sum+=300;;4)echo "帽子购买成功"let sum+=200;;5)echo "袜子购买成功"let sum+=100;;6)echo "放弃购买";;*)echo "输入错误"esacread -p "是否继续在这家店购物?(yes/no)" doingdoneread -p "是否继续逛下一家店?(yes/no)" goingif [ "$going" == "yes" ];thenlet n++elsebreakfi
doneecho -e "一共逛了${n}家店,\n合计总消费为${sum}元"
##############################
#!/bin/bash:指定使用bash作为解释器。
#写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。:注释说明脚本的功能和规则。
n=1:定义变量n为1,表示开始逛第一家商店。
sum=0:定义变量sum为0,表示购物总额初始为0。
while true:无限循环,直到用户决定不再继续逛。
do:循环体开始。
echo "来到第${n}家商店的门口":输出当前逛的是哪一家商店。
read -p "是否进店逛逛?(yes/no)" doing:询问用户是否进入这家商店。
until [ "$doing" == "no" ]:如果用户选择不进入这家商店,则跳出循环。
do:循环体开始。
echo -e "欢迎光临!\n1:衣服¥500\n2:裤子¥400\n3:鞋子¥300\n4:帽子¥200\n5:袜子¥100\n6:放弃购买":列出五种商品供用户选择。
read -p "请选择需要购买的商品序号:" num:读取用户输入的商品序号。
case $num in:根据用户输入的商品序号执行相应的操作。
1):如果用户选择了衣服,输出购买成功信息,并将500加到购物总额中。
2):如果用户选择了裤子,输出购买成功信息,并将400加到购物总额中。
3):如果用户选择了鞋子,输出购买成功信息,并将300加到购物总额中。
4):如果用户选择了帽子,输出购买成功信息,并将200加到购物总额中。
5):如果用户选择了袜子,输出购买成功信息,并将100加到购物总额中。
6):如果用户选择了放弃购买,输出放弃购买的信息。
*):如果用户输入了其他数字,输出输入错误信息。
esac:结束case语句。
read -p "是否继续在这家店购物?(yes/no)" doing:询问用户是否继续在这家店购物。
done:循环体结束。
read -p "是否继续逛下一家店?(yes/no)" going:询问用户是否继续逛下一家店。
if [ "$going" == "yes" ];then:如果用户选择继续逛下一家店,执行下面的代码块。
let n++:将变量n加1,表示逛下一家店。
else:如果用户选择不再继续逛,执行下面的代码块。
break:跳出循环。
fi:结束if语句。
done:循环体结束。
echo -e "一共逛了${n}家店,\n合计总消费为${sum}元":输出总共逛了多少家店以及购物总额。

5.菱形
#!/bin/bash
#菱形
read -p "请输入大小数值:" numfor ((a=1; a<=num; a++))
dofor ((i=num; i>a; i--))doecho -n " "donec=$[(a*2)-1]for ((b=1; b<=c; b++))doecho -n "*"doneecho ""
donefor ((a=num-1; a>=1; a--))
do#输出空格正三角for ((b=num; b>a; b--))doecho -n " "done#输出倒等腰三角c=$[(a*2)-1]for ((i=1; i<=c; i++))doecho -n "*"doneecho ""
done
######################
#!/bin/bash:这是一个shebang,指定了脚本的解释器为bash。
read -p "请输入大小数值:" num:提示用户输入一个数值,并将输入的数值赋值给变量num。
for ((a=1; a<=num; a++)):外层循环,控制打印的行数。
for ((i=num; i>a; i--)):内层循环,控制每行打印空格的数量。
echo -n " ":打印一个空格,但不换行。
c=$[(a*2)-1]:计算每行星号的数量。
for ((b=1; b<=c; b++)):内层循环,控制每行打印星号的数量。
echo -n "*":打印一个星号,但不换行。
echo "":换行。
for ((a=num-1; a>=1; a--)):外层循环,控制打印的行数。
for ((b=num; b>a; b--)):内层循环,控制每行打印空格的数量。
c=$[(a*2)-1]:计算每行星号的数量。
for ((i=1; i<=c; i++)):内层循环,控制每行打印星号的数量。
echo -n "*":打印一个星号,但不换行。
echo "":换行。

6.倒等腰三角形,5行
#!/bin/bash
#倒等腰三角形,5行#外循环控制三角的行数
for ((a=5; a>=1; a--))
do#输出空格正三角for ((b=5; b>a; b--))doecho -n " "done#输出倒等腰三角c=$[(a*2)-1]for ((i=1; i<=c; i++)) doecho -n "*"doneecho ""
done
#################
#!/bin/bash:这是一个shebang,指定了脚本的解释器为bash。
for ((a=5; a>=1; a--)):外层循环,控制打印的行数。
for ((b=5; b>a; b--)):内层循环,控制每行打印空格的数量。
echo -n " ":打印一个空格,但不换行。
c=$[(a*2)-1]:计算每行星号的数量。
for ((i=1; i<=c; i++)):内层循环,控制每行打印星号的数量。
echo -n "*":打印一个星号,但不换行。
echo "":换行。

7.等腰三角形
#!/bin/bash
#等腰三角形read -p "请输入三角形的大小数值:" num#控制三角形的行数
for ((a=1; a<=num; a++))
do#输出倒三角每行的空格数,第一行4个,第二行3个,每行做递减for ((i=num; i>a; i--))doecho -n " "done#输出等腰三角每行的*数,第一行输出1个,第二行3个,第三行5个,以此类推c=$[(a*2)-1]for ((b=1; b<=c; b++))doecho -n "*"doneecho ""
done
#################
#!/bin/bash:这是一个shebang,指定了脚本的解释器为bash。
read -p "请输入三角形的大小数值:" num:提示用户输入一个数值,并将输入的数值赋值给变量num。
for ((a=1; a<=num; a++)):外层循环,控制打印的行数。
for ((i=num; i>a; i--)):内层循环,控制每行打印空格的数量。
echo -n " ":打印一个空格,但不换行。
c=$[(a*2)-1]:计算每行星号的数量。
for ((b=1; b<=c; b++)):内层循环,控制每行打印星号的数量。
echo -n "*":打印一个星号,但不换行。
echo "":换行。
8.倒直角三角形
#!/bin/bash
#倒直角三角形#外循环控制行数
for ((a=1; a<=9; a++))
do#内循环控制每行输出的*数量,第一行输出最多,每行做递减for ((b=9; b>=a; b--))doecho -n "*"doneecho ""
done
#############################
#!/bin/bash:这是一个shebang,指定了脚本的解释器为bash。
for ((a=1; a<=9; a++)):外层循环,控制打印的行数。
for ((b=9; b>=a; b--)):内层循环,控制每行打印星号的数量。
echo -n "*":打印一个星号,但不换行。
echo "":换行。
9.
9.正直角三角形
#!/bin/bash
#正直角三角形#外循环控制三角的行数
for ((a=9; a>=1; a--))
do#内循环控制每行输出的 * 的数量,第一行输出一个*,每行递增for ((b=9; b>=a; b--))do echo -n "*"doneecho ""
done
################
外循环控制三角的行数,从9到1递减;
内循环控制每行输出的 * 的数量,第一行输出一个*,每行递增;
使用echo -n ""在同一行输出多个;
使用echo ""换行
10.输出长度为9个*,4行的矩形
#!/bin/bash
#输出长度为9个*,4行的矩形for ((a=1; a<=4; a++))
dofor ((b=1; b<=9; b++))doecho -n '*'doneecho ''
done
##########
#!/bin/bash:这是一个shebang,指定了脚本的解释器为Bash。
#输出长度为9个*,4行的矩形:这是一个注释,用于描述脚本的功能。
for ((a=1; a<=4; a++)):这是一个for循环,用于控制矩形的行数。变量a从1开始递增,直到4。
do:表示for循环的开始。
for ((b=1; b<=9; b++)):这是一个嵌套的for循环,用于控制每行输出的 * 的数量。变量b从1开始递增,直到9。
do:表示内层for循环的开始。
echo -n '*':使用echo命令输出一个星号(*),并且不换行(-n选项)。
done:表示内层for循环的结束。
echo '':使用echo命令输出一个空字符串,用于换行。
done:表示外层for循环的结束。
相关文章:
SHELL-双重循环习题练习
1.99乘法表 #!/bin/bash #99乘法表for ((second1; second<9; second)) dofor ((first1; first<second; first))do echo -n -e "${first}*${second}$[first*second]\t" done echo done ######### 首先定义了一个外循环变量second,初始值为1&am…...
2024年为什么很多电商商家,都想涌入视频号,究竟是什么原因?
大家好,我是电商糖果 对电商有了解的朋友,在今年肯定发现一个现象,那就是很多商家对视频号比较青睐。 视频号究竟有何魔力,让越来越多的商家都想要入驻。 其实很简单,它让商家看到了市场。 视频号背后是谁…...
Google Gemma 2B 微调实战(IT科技新闻标题生成)
本文我将使用 Google 的 Gemma-2b 模型来微调一个基于IT科技新闻正文来生成对应标题的模型。并且我将介绍如何使用高度集成的训练框架来进行快速微调。 开始前 为了尽可能简化整个流程,我将使用 linux-cn 数据集[1]作为本次训练任务的训练数据。 模型选择使用 Gemma-2b[2],…...
RabbitMQ:深入理解高性能消息队列
RabbitMQ:深入理解高性能消息队列 文章目录 RabbitMQ:深入理解高性能消息队列前言一、RabbitMQ概述二、RabbitMQ的核心概念三、RabbitMQ的工作原理一、生产者发送消息二、交换机转发消息三、队列存储消息四、消费者接收并处理消息 四、RabbitMQ的使用场景…...
【北京迅为】《iTOP-3588开发板源码编译手册》-第4章 Android12/Linux设备树简介
RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…...
C++ C# 贝塞尔曲线
二阶贝塞尔曲线公式 三阶贝塞尔曲线公式 C 三维坐标点 二阶到N阶源码 //二阶公式: FVector BezierUtils::CalculateBezierPoint(float t, FVector startPoint, FVector controlPoint, FVector endPoint) {float t1 (1 - t) * (1 - t);float t2 2 * t * (1 - t);…...
勒索软件漏洞?在不支付赎金的情况下解密文件
概述 在上一篇文章中,笔者对BianLian勒索软件进行了研究剖析,并且尝试模拟构建了一款针对BianLian勒索软件的解密工具,研究分析过程中,笔者感觉构建勒索软件的解密工具还挺有成就感,因此,笔者准备再找一款…...
实时“秒回”,像真人一样语音聊天,GPT-4o模型强到恐怖
今天凌晨OpenAl发布了 GPT-4o,这是一种新的人工智能模式,集合了文本、图片、视频、语音的全能模型。 能实时响应用户的需求,并通过语音来实时回答你,你可以随时打断它。还具有视觉能力,能识别物体并根据视觉做出快速的…...
Properties配置文件和源码
先对测试类进行get方法复写得到getReqType 判断caseinfo等于get时,就是get请求,反之就不是 这里的url和param都是xxx代替,如果直接写内容,每次都会请求 三目运算优化 为什么要用配置文件 test里时url,可以将ip和端口写在配置文…...
redis原生命令及项目使用
主动更新策略 缓存问题及解决 布隆过滤出现哈希冲突解决方案: 选择合适的哈希函数:布隆过滤器的性能和哈希函数的选择密切相关。选择高效、低碰撞率的哈希函数可以降低误判率。通常使用的哈希函数有 MurmurHash、FNV 等。 合理设置过滤器大小:过滤器的大小(位数组的大小)…...
使用VSCode生成代码、查询数据表
利用VSCode中百度生成 一、 1、输入内容:“给我生成一个student表,要求有id,createDate,userName,phone,age,sex,introduce的列信息,给我DDL与DML,5条信息都为中文信息,并且有一个userName必须等于张先生” 2、将生成的语句复制粘贴到数据库…...
使用 PXE+Kickstart 批量网络自动装机
前言: 正常安装系统的话使用u盘一个一个安装会非常慢,所以批量安装的技术就出来了。 一、 概念 PXE (Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,可以让计算机通过网络来启动…...
微信小程序交互增强:实现上拉加载、下拉刷新与一键返回顶部【代码示例】
微信小程序交互增强:实现上拉加载、下拉刷新与一键返回顶部【代码示例】 基础概念实现步骤与代码示例1. 下拉刷新2. 上拉加载更多3. 返回顶部 性能优化与安全考虑结语与讨论 在微信小程序的开发过程中,提供流畅的用户体验至关重要,其中上拉加…...
leetcode刷题指南
本文我将分享给大家一套我自己使用良久并觉得非常高效的 学习论,它可以运用到 Leetcode 上的刷题,也可以 generalize 到生活中涉及到学习以及记忆的方方面面。当然,本文将以 Leetcode 刷题为 case study 去进行讲解。 更具体一点, 我会教大家…...
hadoop学习---基于Hive的数据仓库相关函数机制及其优化方案
Hive相关函数(部分): if函数: 作用: 用于进行逻辑判断操作 语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 select if(aa,’bbbb’,111) fromlxw_dual; bbbb select if(1<2,100,200) fromlxw_dual; 200nvl函数:…...
【MySQL数据库】丨高可用之MHA集群部署
一、准备工作 1.1 修改主机名 vim /etc/hosts# 添加对应主机 192.168.28.128 mha1 192.168.28.131 mha2 192.168.28.132 mha31.2 关闭防火墙及修改selinux # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭自启动# 修改selinux vim /etc/sy…...
uniapp的底部弹出层实现保姆式教程
实现照片: 此过程先进入uniapp官网,找到扩展组件 打开找到里面的uni-popup和uni-icons 点击进入,下载&安装 点击下载并导入HBuilderX 导入到你使用的目录,如test目录 同样将uni-icons点击下载并导入HBuilderX 点击合并 此时te…...
国外IP代理免费试用技巧
随着互联网的普及,人们越来越依赖于网络来获取信息、进行交流和娱乐。国外IP代理就成了利器之一。在本文中,我们将探讨如何免费使用国外IP代理。 一、了解国外IP代理的原理 国外IP代理,简单来说,就是通过连接到位于国外的代理服务…...
vue-cropper裁剪图片 vue
效果图 1.配置环境 npm install vue-cropper 2.代码 <template><div class"cropper-content"><div class"cropper-box"><div class"cropper"><vue-cropper ref"cropper" :img"option.img" :…...
算法-卡尔曼滤波之基本数学的概念
1.均值 定义:均值是一组数据中所有数值的总和除以数据的数量。均值是数据的中心趋势的一种度量,通常用符号 xˉ 表示。 :对于包含 n 个数据的数据集 {𝑥1,𝑥2,...,𝑥𝑛},均值 xˉ 计…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
