shell脚本语句(画矩形、三角形、乘法表和小游戏)(#^.^#)
目录
一、语句
一、条件语句
一、以用户为例演示
一、显示当前登录系统的用户信息
二、显示有多少个用户
二、单分支if
一、输入脚本
二、验证结果
三、双分支if
一、输入脚本
二、验证结果
四、多分支if
一、输入脚本
二、验证
二、循环语句
一、shell版本的循环语句
二、C语言版本
三、举例
三、输出一个矩形
四、在矩形的基础上显示一个三角形
五、输出九九乘法表
六、猜价格(小游戏)
一、脚本配置
二、验证
一、显示结果(第一种)
二、显示结果(第二种)
一、语句
一、条件语句
一、以用户为例演示
一、显示当前登录系统的用户信息
w命令

二、显示有多少个用户
w | wc -l

显示有7个用户

前两个是固定标题,从第三个开始才是登录用户,所以要统计数量需要
命令:echo $[$(w | wc -l) -2]

显示结果

二、单分支if
语法:if condition;then command

一、输入脚本
#!/bin/bash
#test
#mpy
#单分支if
user_num=$[$(w | wc -l) - 2]
if [ $user_num -gt 3 ];then
echo "用户过多登录"
fi


二、验证结果

三、双分支if
语法:if condition;then command;else command

一、输入脚本
#多分支if
if [ $user_num -gt 5 ];then
echo "登录用户过多"
else
echo "登录用户适中"
fi
二、验证结果


四、多分支if
语法:if condition;then command;elif condition;then command;elif

#多分支if 成绩判断
一、输入脚本
#A:90~100;B:80~89;C:70~79;D:0~69
read -p "请输入要查询的成绩: " score
if [ $score -lt 0 -o $score -gt 100 ];then
echo "输入错误,请输入0~100的数字"
$0
else
if [ $score -ge 90 -a $score -le 100 ];then
echo "A"
elif [ $score -ge 80 -a $score -le 89 ];then
echo "B"
elif [ $score -ge 70 -a $score -le 79 ];then
echo "C"
else
echo "D"
fi
fi

在这段脚本中,使用了read命令来获取用户输入的成绩,并存储在变量score中
使用if语句判断输入的成绩是否小于0或大于100,如果是,则打印错误信息并重新运行脚本
90-100的区间是A
80-89 的区间是B
70-79的区间是C
其余的是D
二、验证

二、循环语句
一、shell版本的循环语句
for i in 取值范围;do
command
done

二、C语言版本
for ((i=初始值;condition;i++));do command done

for ((i=初始值;condition;i--));do command done
则是递减1
三、举例
for i in {1..10};do
echo $i
done


可以在里面嵌入if语句,满足条件时数数,不满足则不数数
for i in {1..10};do
if [ $(($i % 2)) -eq 0 ];then
echo $i
fi
done

等于0的时候输出,不等于0则不管

验证结果

只显示奇数
for i in {1..10};do
if [ $(($i % 2)) -ne 0 ];then
echo $i
fi
done
因为除2 不是0就是1
验证

C语言的写法
for ((i=1;i<=10;i=i+2));do
echo $i
done
每次递增两个

验证

当等于i=i+3的时候从1开始每次加三个

for ((i=2;i<=10;i=i+2));do
echo $i
done
显示只有偶数
从2开始每次递增2

三、输出一个矩形
#!/bin/bash
#test
#mpy
for ((i=1;i<=10;i++));do
for ((j=1;j<=10;j++));do
echo -n " *"
done
echo
done


赋予权限 chmod +x jx.sh
./jx.sh
成功获得一个矩形

四、在矩形的基础上显示一个三角形
#!/bin/bash
#test
#mpy
for ((i=1;i<=10;i++));do
for ((j=1;j<=i;j++));do
echo -n " *"
done
echo
done



五、输出九九乘法表
#!/bin/bash
#test
#mpy
for ((i=1;i<10;i++));do
for ((j=1;j<=i;j++));do
echo -n -e "$j x $i = $[i*j]\t"
done
echo
done
这是一个Bash脚本
-
#!/bin/bash:这是一个shebang,告诉系统要使用bash解释器来运行脚本。 -
#test和#mpy:这是注释行,用于说明脚本的用途和功能。 -
for ((i=1;i<10;i++)):这是一个外循环的for循环,它从1开始迭代,每次增加1,直到i的值小于10为止。 -
for ((j=1;j<=i;j++)):这是一个嵌套在外循环中的内循环的for循环,它从1开始迭代,每次增加1,直到j的值小于等于i为止。 -
echo -n -e "$j x $i = $[i*j]\t":这是一个echo语句,用于打印乘法表的一行。其中$j和$i是变量,代表内外循环的迭代值,$[i*j]表示i和j的乘积。 -
echo:这是一个空的echo语句,用于打印换行符,以便在打印完一行乘法表后换行。
显示结果

六、猜价格(小游戏)
一、脚本配置
#!/bin/bash
#test
#mpy
rand=$[$RANDOM % 100]
times=0
while true
do
read -p "请输入你要猜测的价格: " price
let times++
if [ $price -eq $rand ];then
if [ $times -eq 1 ];then
echo "你猜对了,真NB,一次就中"
elif [ $times -lt 7 ];then
echo "你猜对了,一共猜测了$times次! "
else
echo "挑战失败! "
echo "正确的价钱是$rand"
fi
exit 0
elif [ $price -gt $rand ];then
echo "猜大了! "
else
echo "猜小了! "
fi
done


二、验证
一、显示结果(第一种)

二、显示结果(第二种)

相关文章:
shell脚本语句(画矩形、三角形、乘法表和小游戏)(#^.^#)
目录 一、语句 一、条件语句 一、以用户为例演示 一、显示当前登录系统的用户信息 二、显示有多少个用户 二、单分支if 一、输入脚本 二、验证结果 三、双分支if 一、输入脚本 二、验证结果 四、多分支if 一、输入脚本 二、验证 二、循环语句 一、shell版本的循环…...
vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件
文章目录 ⭐前言⭐react 组件传值实例💖父组件传值给子组件(props)💖子组件传递事件给父组件props绑定事件💖父组件触发子组件的事件Ref ⭐vue3 组件传值实例💖 父组件传递数据给子组件props💖 …...
2023国赛数学建模C题思路模型代码 高教社杯
本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…...
wxPython使用matplotlib绘制动态曲线
1.思路 我们创建了一个继承自wx.Frame的自定义窗口类MyFrame。在MyFrame的构造函数中,我们创建了一个matplotlib的Figure对象和一个FigureCanvas对象,用于在窗口中显示绘图结果。然后,我们使用numpy生成了一个包含100个点的x轴坐标数组self.…...
JVM——类的生命周期
文章目录 类加载过程加载验证准备解析初始化 卸载 一个类的完整生命周期如下: 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->…...
【Docker】docker数据卷(数据挂载)持久化
docker数据卷(数据挂载)持久化 一、docker对于数据的管理二、docker挂载主机目录---指定路径挂载三、docker使用数据卷Volume挂载四、数据共享--数据卷容器五、备份和恢复 docker的镜像是由多个只读的文件系统叠加在一起形成的。当我们在我启动一个容器的…...
Spring Boot实现IP地址解析
一、本地解析 如果使用本地ip解析的话,我们将会借助ip2region,该项目维护了一份较为详细的本地ip地址对应表,如果为了离线环境的使用,需要导入该项目依赖,并指定版本,不同版本的方法可能存在差异。 <d…...
小程序中通过canvas生成并保存图片
1. html <canvas class"canvas" id"photo" type"2d" style"width:200px;height: 300px;"></canvas> <button bindtap"saveImage">保存</button> <!-- 用来展示生成的那张图片 --> <image…...
Error creating bean with name ‘esUtils‘ defined in file
报错异常: 背景: esUtils在common服务中、启动media服务时候、报这个异常、后排查esUtils在启动时候发生异常引起的、在相关bean中加入try{}catch{}即可解决问题 String[] split url.split(","); HttpHost[] httpHosts new HttpHost[split.…...
Java开发面试题 | 2023
Java基础 接口和抽象类的区别?Java动态代理HashMap 底层实现及put元素的具体过程currenthashmap底层实现原理?map可以放null值吗,currenthashmap为什么不能放null值synchronze和reetrantlock区别?怎样停止一个运行中的线程&#…...
Java课题笔记~ 自定义拦截器实现权限验证
实现一个权限验证拦截器。 1、修改web.xml文件中请求路径 2、将所有的页面放入WEB-INF目录下 3、开发登录FirstController 4、开发拦截器 5、配置springmvc.xml文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.spri…...
微信小程序使用npm引入三方包详解
目录 1 前言2 微信小程序npm环境搭建2.1 创建package.json文件2.2 修改 project.config.json2.3 修改project.private.config.json配置2.4 构建 npm 包2.5 typescript 支持2.6 安装组件2.7 引入使用组件 1 前言 从小程序基础库版本 2.2.1 或以上、及开发者工具 1.02.1808300 或…...
pytest自动化框架运行全局配置文件pytest.ini
还记得在之前的篇章中有讲到Pytest是目前主要流行的自动化框架之一,他有基础的脚本编码规则以及两种运行方式。 pytest的基础编码规则是可以进行修改,这就是今日文章重点。 看到这大家心中是否提出了两个问题:pytest的基础编码规则在哪可以…...
视频播放实现示例Demo
学习链接 vuespringboot文件分片上传与边放边播实现 同步加载、播放视频的实现 ---- range blob mediaSource 通过调试技术,我理清了 b 站视频播放很快的原理 MSE (Media Source Extensions) 上手指南 浅聊音视频的媒体扩展(Media Source Extension…...
makefile的自动化变量
一、是什么? 自动化变量:makefile依据执行的规则自动变化生成的变量 $(@) 规则的目标文件名 $(^) 所有依赖 依赖列表 $(<)第一个依赖文件名 $(*)规则中目标中%部分名 $(?)所有比目标文件更新的依赖文件列表,空格分隔 二、使用步骤 1.引入库 代码如下(示例): make …...
使用Kind搭建本地k8s集群环境
目录 1.前提条件 2.安装Kind 3.使用Kind创建一个K8s集群 3.1.创建一个双节点集群(一个Master节点,一个Worker节点) 3.2.验证一下新创建的集群信息 3.3.删除刚刚新建的集群 4.安装集群客户端 4.1.安装kubectl 4.1.1.验证kubectl 4.2.安…...
【STM32RT-Thread零基础入门】 7. 线程创建应用(多线程运行机制)
硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、RT-Thread相关接口函数1. 获取当前运行的线程2. 设置调度器钩子函数 二、程序设计1. 头文件包含及宏定义2. 线程入口函数定义3. main函数设…...
.net日志系统
.NET 平台提供了强大的日志记录系统,用于在应用程序中记录各种事件、错误和调试信息。最常用的日志记录库是 Microsoft.Extensions.Logging,它是一个通用的日志接口和基础框架,可以与多种日志实现集成。以下是如何使用 .NET 日志系统的基本步骤: 安装 NuGet 包:首先,您需…...
SpringCloud学习笔记(二)_Eureka注册中心
一、Eureka简介 Eureka是一项基于REST(代表性状态转移)的服务,主要在AWS云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。我们称此服务为Eureka Server。Eureka还带有一个基于Java的客户端组件Eureka Clientÿ…...
spark的eventLog日志分析
查找满足指定条件的app_id查询条件: 表名、时间、节点名时间限定: 最好适当放大, 不知道什么原因有点不准eventLog的存放路径: spark.history.fs.logDirectory 1. spark-sql 先限定时间段;数据是逐行读入的, 但 app_id要按整个文件过滤, 按每个条件打标;按app_id粒度聚合, 查…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
