SHELL-双重循环习题练习

1.99乘法表

#!/bin/bash
#99乘法表

for ((second=1; second<=9; second++))
do
    for ((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--))
    do
        echo -n " "
    done
    #输出正直角三角
    for ((b=1; b<=a; b++))
    do
        echo -n "*"
    done
    #输出小一号的正直角三角,第一行不输出*
    for ((c=1; c<a; c++))
    do
        echo -n "*"
    done
    #每行换行
    echo ""
done
################
第一个内层循环用于输出空格,以形成倒三角形的形状。它从9开始递减到当前行数a,每次输出一个空格。
第二个内层循环用于输出正直角三角形的星号(*)。它从1递增到当前行数a,每次输出一个星号。
第三个内层循环用于输出小一号的正直角三角形的星号(*),但第一行不输出星号。它从1递增到当前行数a-1,每次输出一个星号。

3.通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

#!/bin/bash
#通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

length=$(echo $PATH | awk -F: '{print NF}')
path=$PATH


for ((i=1; i<=length; i++))
do
   folder=${path%%:*}
   path=${path#*:}
   
   find $folder -type d
   files=$(find $folder -type f)

   for j in $files
   do
       if [ ! -x $j ];then
           echo "$j 为不执行文件"
       fi
   done

done
##############
获取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
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)
            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 "输入错误"
        esac
        read -p "是否继续在这家店购物?(yes/no)" doing
    done

    read -p "是否继续逛下一家店?(yes/no)" going
    if [ "$going" == "yes" ];then
        let n++
    else
        break
    fi
done

echo -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 "请输入大小数值:" num

for ((a=1; a<=num; a++))
do
    for ((i=num; i>a; i--))
    do
        echo -n " "
    done
    c=$[(a*2)-1]
    for ((b=1; b<=c; b++))
    do
        echo -n "*"
    done
    echo ""
done


for ((a=num-1; a>=1; a--))
do
    #输出空格正三角
    for ((b=num; b>a; b--))
    do
        echo -n " "
    done

    #输出倒等腰三角
    c=$[(a*2)-1]
    for ((i=1; i<=c; i++))
    do
        echo -n "*"
    done
    echo ""
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--))
    do
        echo -n " "
    done

    #输出倒等腰三角
    c=$[(a*2)-1]
    for ((i=1; i<=c; i++))    
    do
        echo -n "*"
    done
    echo ""
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--))
    do
        echo -n " "
    done
    #输出等腰三角每行的*数,第一行输出1个,第二行3个,第三行5个,以此类推
    c=$[(a*2)-1]
    for ((b=1; b<=c; b++))
    do
        echo -n "*"
    done
    echo ""
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--))
    do
        echo -n "*"
    done
    echo ""
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 "*"
    done
    echo ""
done
################
外循环控制三角的行数,从9到1递减;
内循环控制每行输出的 * 的数量,第一行输出一个*,每行递增;
使用echo -n ""在同一行输出多个;
使用echo ""换行

10.输出长度为9个*,4行的矩形

#!/bin/bash
#输出长度为9个*,4行的矩形

for ((a=1; a<=4; a++))
do
   for ((b=1; b<=9; b++))
   do
       echo -n '*'
   done
   echo ''
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循环的结束。

​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】Spring Web MVC入门:掌握Spring的MVC框架基础

目录 Spring Web MVC什么是Spring Web MVCMVC 定义什么是Spring MVC 学习Spring MVC1. 项目准备2. 建立连接 Spring Web MVC 什么是Spring Web MVC 官⽅对于 Spring MVC 的描述是这样的&#xff1a; Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀…

【go项目01_学习记录12】

代码组织 1 代码结构2 重构与测试2.1 安装测试功能2.2 testify 的常用断言函数 3 表组测试 1 代码结构 所有的代码写在一个main.go文件里面&#xff0c;GO编译器也是可以正常执行的。但是当代码量很庞大时&#xff0c;很难进行维护。 Go Web 程序的代码组织 单文件——反模式…

C51 单片机编程模板及编码规范

文章目录 一、C51 单片机模板创建1. 新建工程及选型2. 创建主程序文件3. 创建主程序的头文件4. 编译配置5. 其他 二、C51 的编码规范 在查阅了很多关于 C51 单片机的程序后&#xff0c;个人感觉目前网上有关 C51 单片机程序的质量参差不齐&#xff0c;很多程序的代码风格及其糟…

Kubernetes——CNI网络组件

目录 一、Kubernetes三种接口 二、Kubernetes三种网络 三、VLAN与VXLAN 1.VLAN 2.VXLAN 3.区别 3.1作用不同 3.2vxlan支持更多的二层网络 3.3已有的网络路径利用效率更高 3.4防止物理交换机Mac表耗尽 3.5相对VLAN技术&#xff0c;VXLAN技术具有以下优势 四、CNI网…

设计模式-动态代理

目录 定义 代理模式的优缺点 优点 缺点 应用场景 静态代理 动态代理 相关资料 定义 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它的概念很简单&#xff0c;它通过创建一个代理对象来控制对原始对象的访问。代理模式主要涉及两个…

分布式搜索-elaticsearch基础 概念

什么是elaticsearch: 倒排索引&#xff1a;就是将要查询的内容分成一个个词条&#xff0c;在将词条文档id存入&#xff0c;词条是唯一的。 文档词条总结: mysql和Elasticsearch概念对比: 架构: 基本概念总结:

uniapp 实现下拉刷新 下滑更新

效果图 在app或者小程序中向下滑动 会出现刷新数据 ,而上拉到底 需要更新数据 功能实现 主要俩种方式 依赖生命周期 在page.json中开启 page.json "style" : {"navigationBarTitleText" : "小小练习","backgroundTextStyle": &qu…

Transformer模型详解05-Decoder 结构

文章目录 简介结构原理第一个 Multi-Head Attention第二个 Multi-Head AttentionSoftmax 预测输出单词 简介 Transformer 模型由编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;两部分组成。这里我会着重描述解码器的结构以及在预训练、输入输…

StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读

StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文阅读 Abstract1 Introduction2 Related Work3 Proposed Approach4 Experiments5 Conclusion 文章信息&#xff1a; 原文链接&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/4…

期权(1):基本概念,权利金,定金,买方,卖方,零和游戏,对赌协议

期权是合约&#xff0c;权利金就是定金&#xff01; 合约到期时 买方可以选择行权&#xff0c;也可以选择不行权。代价就是定金损失。因此亏损封顶&#xff0c;但盈利无限。卖方赚的就是买方的定金&#xff0c;盈利封顶&#xff0c;但亏损无限。 从这里&#xff0c;我们看出…

短视频拍摄+直播间搭建视觉艺术实战课:手把手场景演绎 从0-1短视频-8节课

抖音短视频和直播间你是否遇到这些问题? 短视频是用手机拍还是相机拍?画面怎么拍都没有质感 短视频产量低&#xff0c;拍的素材可用率低 看到别人用手机就能把短视频拍好自己却无从下手 明明已经打了好几盏灯了,但是画面还是比较暗 直播软件参数不会设置&#xff0c;电脑…

【Python探索之旅】列表

目录 特点 入门 访问元素 新增元素 修改元素 插入元素 删除元素 完结撒花 前言 在Python中&#xff0c;列表(List)是最常用的数据结构之一&#xff0c;类似于其他语言&#xff0c;如Java&#xff0c;与其不同啊Python中不需要声明数据类型。它提供了一种灵活且高效的方式…

MySQL创建索引报错 Specified key was too long;max key length is 1000 bytes.

MySQL对创建索引的大小有限制&#xff0c;一般索引键最大长度总和不能超过1000个字节。 问题描述 MySQL创建索引时报错 Specified key was too long;max key length is 1000 bytes. 解决办法 (1) 修改存储引擎 InnoDB的索引字段长度限制大于MyISAM&#xff0c;可以尝试改成…

ansible利用playbook 部署lamp架构

搭建参考&#xff1a;ansible批量运维管理-CSDN博客 定义ansible主机清单 [rootansible-server ~]# vim /etc/hosts 192.168.200.129 host01 192.168.200.130 host02 [rootansible-server ~]# vim /etc/ansible/hosts [webserver] host01 host02 在ansible端编写index.html…

【windows小知识#1】ISO镜像,OEM、Retail这些到底是什么意思

汇总一下每个版本windows会衍生哪些镜像出来&#xff0c;以windows7为例 这些文件名代表的是不同版本和不同语言的Windows 7操作系统的安装光盘映像&#xff08;ISO文件&#xff09;。这些文件主要区分为以下几个方面&#xff1a; 语言&#xff1a;这些文件都是中文版&#x…

平地惊雷,GPT-4o 凌晨震撼发布

GPT-4o 今日凌晨&#xff0c;OpenAI 2024 年春季发布会召开&#xff0c;OpenAI 通过短短 28 分钟的发布会&#xff0c;发布了「再次震惊世界」的 GPT-4o&#xff0c;其中 o 是指 omni&#xff08;全能&#xff09;的意思。 一款「全新交互&#xff08;支持 文本/音频/视频 组合…

【AI学习】聊两句昨夜OpenAI的GPT-4o

蹭个热点&#xff0c;聊两句昨夜的大事件——OpenAI发布GPT-4o&#xff0c;我看到和想到的一点东西。 首先是端到端方法&#xff0c;前面关于深度学习的文章&#xff0c;对端到端的重要性做了一些学习&#xff0c;对端到端这个概念有了一些理解。正如Richard Sutton在《苦涩的…

直播预约丨《袋鼠云大数据实操指南》No.2:实时开发,如何成为数据智能化的有效驱动力

近年来&#xff0c;新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮&#xff0c;持续冲击并革新着企业数字化转型的观念视野&#xff0c;昭示着一个以数据为核心驱动力的新时代正稳步启幕。 面对这些引领经济转型的新兴概念&#xff0c;为了更好地服务于客户…

C语言中的混合运算

1 混合运算 类型强制转换场景 整型数进行除法运算时&#xff0c;如果运算结果为小数&#xff0c;那么存储浮点数时一定要进行强制转换。例子&#xff1a; #include <stdio.h> //运算强制转换 int main(void) {int i5;//整型float ji/2;//这里做的是整型运算&#xff0…

【Linux取经路】进程通信之匿名管道

文章目录 一、进程间通信介绍1.1 进程间通信是什么&#xff1f;1.2 进程间通信的目的1.3 进程通信该如何实现 二、管道2.1 匿名管道2.1.1 站在文件描述符角度深入理解管道2.1.2 接口使用2.1.3 PIPE_BUFFER 和 Pipe capacity2.1.4 管道中的四种情况2.1.5 管道特征总结 2.2 匿名管…