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脚本

  1. #!/bin/bash:这是一个shebang,告诉系统要使用bash解释器来运行脚本。

  2. #test 和 #mpy:这是注释行,用于说明脚本的用途和功能。

  3. for ((i=1;i<10;i++)):这是一个外循环的for循环,它从1开始迭代,每次增加1,直到i的值小于10为止。

  4. for ((j=1;j<=i;j++)):这是一个嵌套在外循环中的内循环的for循环,它从1开始迭代,每次增加1,直到j的值小于等于i为止。

  5. echo -n -e "$j x $i = $[i*j]\t":这是一个echo语句,用于打印乘法表的一行。其中$j$i是变量,代表内外循环的迭代值,$[i*j]表示i和j的乘积。

  6. 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

 

 二、验证

一、显示结果(第一种)

二、显示结果(第二种)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue的图片懒加载

安装&#xff1a; vueuse 插件 npm i vueuse/core 搜索&#xff1a; useIntersectionObserver 方法 import { ref } from vue import { useIntersectionObserver } from vueuse/coreexport default {setup() {const target ref(null)const targetIsVisible ref(false…

c语言关键字_ _align()和_ _packed的使用以及字节对齐原理

c语言中__align()关键字的作用与内存对齐的原理 1、什么是字节对齐 字节对齐(Byte Alignment)是计算机内存中的一种存储优化技术,用于确保数据在内存中的存储位置满足特定的硬件要求,以提高内存访问的效率。在现代计算机体系结构中,许多处理器要求数据以特定的方式对齐,…

k8s集群中service的域名解析、pod的域名解析

前言 在k8s集群中&#xff0c;service和pod都可以通过域名的形式进行相互通信&#xff0c;换句话说&#xff0c;在k8s集群内&#xff0c;通过service和pod的域名&#xff0c;可以直接访问内部应用&#xff0c;不必在通过service ip地址进行通信&#xff0c;一般的&#xff0c;…

空调企业只干空调,卡萨帝却干了业主想不到的事

作者 | 曾响铃 文 | 响铃说 今年入夏以来&#xff0c;随着气温的不断攀升&#xff0c;空调已经成为生活、工作中的“绝对刚需”。由此而来的则是空调产品的销量大增。 但也有不少消费者表示&#xff0c;随着产品功能的越发相似&#xff0c;价格趋同&#xff0c;使空调变得越…

类的加载过程二:Linking

1、验证&#xff08;Verify&#xff09; 目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求&#xff0c;保证被加载类的正确性&#xff0c;不会危害虚拟机自身安全。主要包括四种验证&#xff0c;文件格式验证&#xff0c;元数据验证&#xff0c;字节码验证&#xff…

Postman 如何进行参数化

前言 Postman作为一款接口测试工具&#xff0c;受到了非常多的开发工程师的拥护。 那么做为测试&#xff0c;了解Postman这款工具就成了必要的了。 这篇文章就是为了解决Postman怎么进行参数化的。 全局变量 全局变量是将这个变量设置成整个程序的都可以用&#xff0c;不用去…

装箱和拆箱

1. 概念 装箱 将值类型转换成等价的引用类型 装箱的步骤 拆箱 将一个已装箱的引用类型转换为值类型&#xff0c;拆箱操作需要声明拆箱后转换的类型 拆箱的步骤 1&#xff09;获取已装箱的对象的地址 2&#xff09;将值从堆上的对象中复制到堆栈上的值变量中 2. 总结 装箱和拆箱…

数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结

1.数组指针概念和应用 首先数组指针应该是一个数组&#xff0c;它的定义如下&#xff1a; 数组指针&#xff0c;指的是数组名的指针&#xff0c;即数组首元素地址的指针。即是指向数组的指针。例&#xff1a;int (*p)[10]; p即为指向数组的指针&#xff0c;又称数组指针。 数…

Microsoft Visual Studio + Qt插件编程出现错误error MSB4184问题

文章目录 报错解决 报错 C:\Users\Administrator\AppData\Local\QtMsBuild\qt_globals.targets(786,7): error MSB4184: 无法计算表达式“[System.IO.File]::ReadAllText(C:\Users\Administrator\AppData\Local\QtMsBuild\qt.natvis.xml)”。 未能找到文件“C:\Users\Administ…

C语言:指针(超深度讲解)

目录 指针&#xff1a; 学习目标&#xff1a; 指针可以理解为&#xff1a; 字符指针&#xff1a; 定义&#xff1a;字符指针 char*。 字符指针的使用&#xff1a; 练习&#xff1a; 指针数组&#xff1a; 概念&#xff1a;指针数组是一个存放指针的数组。 实现模拟二维…

NetApp EF 系列全闪存阵列 EF600 和 EF300 ——经济实惠、性能极高的全闪存存储系统、 适用于各种混合型企业工作负载

NetApp EF 系列全闪存阵列 EF600 和 EF300 ——经济实惠、性能极高的全闪存存储系统、 适用于各种混合型企业工作负载 功能强大且经济实惠的性能 NetApp EF600 全闪存阵列专为需要最高性能的工作负载而设计。NetApp EF300 阵列专为大数据分析和数据库等混合工作负载环境而设计…

NPDP认证适合什么人考?这个职业必考!

NPDP认证全称为New Product Development Professional&#xff0c;是指由Product Development and Management Association&#xff08;PDMA&#xff09;颁发的产品经理国际资格认证认证。 NPDP认证旨在评估和认证具有新产品开发知识、技能和经验的个人。与PMP证书不同&#x…

MySQL 临时表与内存表的区别

文章目录 1.临时表2.内存表3.区别4.小结 在 MySQL 中&#xff0c;Temporary Table&#xff08;临时表&#xff09;和 Memory Table&#xff08;内存表&#xff09;是两种不同的表类型&#xff0c;它们有一些重要的区别和用途。 1.临时表 临时表&#xff08;Temporary Table&a…

AMBA总线协议(8)——AHB(六):分割传输

一、前言 在之前的文章中&#xff0c;我们重点介绍了AHB传输的仲裁&#xff0c;首先介绍了仲裁相关的信号&#xff0c;然后分别介绍了请求总线访问&#xff0c;授权总线访问&#xff0c;猝发提前终止&#xff0c;锁定传输和默认主机总线&#xff0c;在本文中我们将继续介绍AHB的…

网络编程套接字(1)

文章目录 网络编程套接字(1)1. 预备知识1.1 源IP与目的IP1.2 认识端口号1.3 理解 "端口号" 和 "进程ID"1.4 源端口号和目的端口号1.5 认识TCP协议和UDP协议(1) TCP(2) UDP 1.6 网络字节序 2. socket编程接口2.1 socket 常见API2.2 sockaddr结构 网络编程套…

.NET6.0 System.Drawing.Common 通用解决办法

最近有不少小伙伴在升级 .NET 6 时遇到了 System.Drawing.Common 的问题&#xff0c;同时很多库的依赖还都是 System.Drawing.Common &#xff0c;而 .NET 6 默认情况下只在 Windows 上支持使用&#xff0c;Linux 上默认不支持这就导致在 Linux 环境上使用会有问题&#xff0c;…

低代码解放生产力,助力企业高效发展

近年来&#xff0c;随着数字化转型的推进&#xff0c;企业对于软件开发的需求日益显著。然而&#xff0c;传统的软件开发模式通常需要耗费大量时间和资源&#xff0c;限制了企业的快速响应能力。为了解决这一难题&#xff0c;低代码开发平台应运而生&#xff0c;成为企业和开发…

【沁恒蓝牙mesh】CH58x串口环形FIFO数据处理

本文章主要针对沁恒科技的CH58x芯片&#xff0c;以 BLE_UART 工程为依托&#xff0c;介绍串口数据的接收与处理。 该工程中 串口数据的处理用到了环形FIFO机制&#xff0c;可作为其他开发工具 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我…

C++信息学奥赛1130:找第一个只出现一次的字符

这段代码的功能是找出输入字符串中第一个重复出现的字符&#xff0c;并输出该字符。 解析注释后的代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {string arr;getline(cin, arr); int a0;for(int i0;i<arr.length();i){for(int j0;j…

OpenEuler 卸载mysql

查询系统是否安装了MySQL rpm -qa | grep -i mysql 关闭mysql 查看MySQL服务运行状态 ps -ef | grep mysql 或者 service mysql status 没有启动 查看rpm包安装的mysql rpm -qa | grep -i mysql 将这些都卸载了 rpm -e mysql5-server rpm -e mysql5-errmsg rpm -e my…