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ˉ 计…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
