流程控制之条件判断
目录
流程控制之条件判断
2.1.if语句语法
2.1.1单分支结构
2.1.2双分支结构
2.1.3多分支结构
2.2.案例
例一:
例2:
例3:
例4:
例5:
例6:
例7:
例8:
例9:
2.3.case多条件判断
2.3.1.格式
2.3.2.执行过程
例10:
流程控制之条件判断
2.1.if语句语法
2.1.1单分支结构
# 语法1:
if <条件表达式>
then
指令
fi#语法2:
if <条件表达式>;then
指令
fi # if,if 标志循环起始终止
2.1.2双分支结构
if <条件表达式
then
指令序列1
else
指令序列2
fi
2.1.3多分支结构
if 条件表达式
then
指令序列1
elif 条件表达式2then
指令序列2
else
指令序列n
fi等价于:
if 条件表达式1;then
分支1
else
if 条件表达式2then
分支
else
if 条件表达式nthen
分支
else
分支
fi
fi
fi
等价于:
if 条件表达式1;then
if 条件表达式2then
if 条件表达式nthen
else
if
else
if
else
if
2.2.案例
例一:
编写脚本choice1.sh,利用单分支结构实现输入2个整数,判断最大值后输出
read -p "输入整数x:" x read -p "输入整数y:" y max=$x if [ $max -le $y ] thenmax=$yfi echo "最大值为$max"
注意:此时只能解决较为简单的数值比较,无法判断输入参数类型。若预实现判断类型,请查看上一篇博客
例2:
面试题: 编写脚本choice2.sh,判断当前系统的剩余内存大小,若低于100M则发送消息进
行告警
查看内存容量:[root@server ~]# free -m 注意:-h显示内容带参数
提取内存剩余容量参数:
[root@server ~]# free -m |tr -s " " | grep Mem
Mem: 1935 1249 66 21 805 686
[root@server ~]# free -m |tr -s " " | grep Mem |cut -d " " -f4
66
编写脚本:sun=$(free -m | tr -s " " | grep Mem | cut -d " " -f4)if [[ $sun < 100 ]] thenecho "警告:内存容量低于100M" elseecho "剩余内存为$sun M,空间足够" fi
例3:
编写脚本choice3.sh,判断当前脚本的执行者身份,若不是root账户执行则输出提示,并提示立刻退出脚本执行
查看当前账户身份:(四种方法)
[root@server ~]# vim choice2.sh
[root@server ~]# whoami
root
[root@server ~]# id -u # 只有管理员账户uid为0
0
[root@server ~]# echo $UID
0[root@server ~]# echo $USER
root # 扩展:su - root 重建立当前系统的环境变量方法一:利用uid来判断
[root@server ~]# vim choice3.sh
account=$(id -u)if [ $account -eq 0 ] thenecho "当前脚本执行者身份为root" elseecho "当前脚本执行者不是root,立刻退出脚本执行"fi
[root@server ~]# bash choice3.sh
当前脚本执行者身份为root
[root@server ~]# mv choice3.sh / # 若要所有账号都可执行该文件则,将文件移动到根下
[root@server ~]# ls /
afs boot dev home lib64 mnt proc run srv tmp var
bin choice3.sh etc lib media opt root sbin sys usr[root@server ~]# su fox
[fox@server root]$ bash /choice3.sh
当前脚本执行者不是root,立刻退出脚本执行[fox@server root]$ su root
密码:
[root@server ~]# bash /choice3.sh
当前脚本执行者身份为root方法二:使用$USER命令来判断
account=$( echo $USER )if [[ $account == "root" ]] thenecho "当前脚本执行者身份为root" elseecho "当前脚本执行者不是root,立刻退出脚本执行"fi
使用su - root 重建立当前系统的环境变量后执行以下操作
[root@server ~]# bash /choice3.sh
当前脚本执行者不是root,立刻退出脚本执行
例4:
编写脚本choice4.sh,实现闺年的判断
口诀:闰年:能被4整除但不能被100整除 或者 能被400整除的年份
read -p "请输入四位数年份:" year if [ $(($year%4)) -eq 0 ] && (( $(($year%400)) != 0 )) || [ $(($year%400)) -eq 0 ] thenecho "$year年是闰年" elseecho "$year年是平年" fi
[root@server ~]# bash choice4.sh
请输入四位数年份:55
55年是平年
[root@server ~]# bash choice4.sh
请输入四位数年份:4
4年是闰年
[root@server ~]# bash choice4.sh
请输入四位数年份:444
444年是闰年
例5:
编写脚本choice5.sh,判断sshd是否运行
[root@server ~]# vim choice5.sread -p "输入运行的软件名:" name num=$(ps -ef |grep $name | grep -v grep |wc -l) if [ $num -gt 0 ];thenecho "程序$name正在运行!" fi
[root@server ~]# bash choice5.sh
输入运行的软件名:sshd
程序sshd正在运行!解析:
通过进程查看sshd是否运行
[root@server ~]# ps -ef |grep sshd | grep -v grep
# 含义:查看并过滤sshd进程,查看并反向过滤grep(不包含grep)
root 33911 32991 0 19:27 pts/2 00:00:00 grep --color=auto sshd
# 该进程为命令本身所对应的进程[root@server ~]# ps -ef |grep sshd | grep -v grep |wc -l
7 # 过滤行数通过端口查看sshd是否运行
[root@server ~]# netstat -lntup | grep 22
[root@server ~]# netstat -lntup | grep 22 |wc -l
2总结:
[root@server ~]# ps -ef |grep 服务名称 | grep -v grep
[root@server ~]# netstat -lntup | grep 端口号
查看某程序是否运行
例6:
编写脚本choice6.sh ,输入百分制成绩,判断后输出等级成绩
方法一:
[root@server ~]# vim choice6.sh
read -p "请输入百分制成绩:" scoreif [ -z $score ];thenecho "未输入数字,请重新输入!" elif [ $score -gt 100 ];thenecho "请输入百分制成绩!" elif [ $score -ge 90 -a $score -le 100 ];thenecho "A" elif [ $score -ge 80 ];thenecho "B" elif [ $score -ge 70 ];thenecho "C" elif [ $score -ge 60 ];thenecho "D" elif [ $score -gt 0 ];thenecho "E" elif [ $score -eq 0 ];thenecho "宝宝真棒!!!!!" else [ $score -lt 0 ];thenecho "请输入百分制成绩!!!" fi
[root@server ~]# bash choice6.sh
请输入百分制成绩:120
请输入百分制成绩!
[root@server ~]# bash choice6.sh
请输入百分制成绩:100
A
[root@server ~]# bash choice6.sh
请输入百分制成绩:60
D
[root@server ~]# bash choice6.sh
请输入百分制成绩:34
E
[root@server ~]# bash choice6.sh
请输入百分制成绩:0
宝宝真棒!!!!!
[root@server ~]# bash choice6.sh
请输入百分制成绩:-1
请输入百分制成绩!!!!
[root@server ~]# bash choice6.sh
请输入百分制成绩:
未输入数字,请重新输入!方法二:
read -p "请输入百分制成绩:" scoreif [ -z $score ];thenecho "为输入数字,请重新输入!" elif [ $score -lt 0 -o $score -gt 100 ];thenecho "成绩有误,重新输入成绩!" elif [ $score -ge 90 -a $score -le 100 ];thenecho "A" elif [ $score -ge 80 ];thenecho "B" elif [ $score -ge 70 ];thenecho "C" elif [ $score -ge 60 ];thenecho "D" elif [ $score -gt 0 ];thenecho "E" else [ $score -eq 0 ];thenecho "宝宝真棒!!!!!" fi
请输入百分制成绩:123
成绩有误,重新输入成绩!
[root@server ~]# bash choice66.sh
请输入百分制成绩:-1
成绩有误,重新输入成绩!
例7:
编写脚本choice7.sh,判断主机的cpu品牌
计算机CPU信息储存位置:
[root@server ~]# cat /proc/cpuinfo # vendor_id cpu品牌对应字段
[root@server ~]# grep "vendor_id" /proc/cpuinfo |uniq |cut -d " " -f2
GenuineIntel # 截取CUP信息[root@server ~]# vim choice7.sh
vendor=$(grep "vendor_id" /proc/cpuinfo | uniq |cut -d " " -f2)if [ $vendor == GenuineIntel ];thenecho "Inter" elif [ $vendor == GenuineAMD ];thenecho "AMD" elseecho "nukonw" fi
[root@server ~]# bash choice7.sh
Inter
例8:
编写脚本choice8.sh,检测主机是否存活
一般通过ping来实现测试的。开启另一台虚拟设备Node1
[root@server a1]# vim choice8.sh
read -p "请输入你需要测试的主机地址:" IP ping -c 2 -w 3 $IP &> /dev/nullif [ $? -eq 0 ];thenecho "主机$IP已经运行" elseecho "主机$IP没有正常运行"fi
[root@server a1]# bash choice8.sh
请输入你需要测试的主机地址:192.168.17.129
主机192.168.17.129已经运行[root@server a1]# bash choice8.sh
请输入你需要测试的主机地址:192.168.17.130
主机192.168.17.130没有正常运行# 上例修改,使用循环测试多台主机,存活的主机显示应用高亮的颜色显示
for IP in 192.168.17.{128..135} do #read -p "请输入你需要测试的主机地址:" IPping -c 2 -w 3 $IP &> /dev/nullif [ $? -eq 0 ];thenecho -e "\e[1;31m 主机$IP已经运行\e[0m"elseecho "主机$IP没有正常运行"fi done
测试结果:
例9:
编写脚本choice9.sh,根据用户的输入内容,判断是数字、字母、其它字符
[root@server a1]# vim choice9.sh
read -p "请输入字母、数字或其他字符:" strif echo $str | grep [a-zA-Z] &> /dev/null;thenecho "输入字符为字母!" elif echo $str | grep [0-9] &> /dev/null;thenecho "输入字符为数字!!" elseecho "输入结果为其他字符!!!" fi
[root@server a1]# bash choice9.sh
请输入字母、数字或其他字符:123456
输入字符为数字!!
[root@server a1]# bash choice9.sh
请输入字母、数字或其他字符:asdffg
输入字符为字母!
[root@server a1]# bash choice9.sh
请输入字母、数字或其他字符:[]\输入结果为其他字符!!!
2.3.case多条件判断
2.3.1.格式
case 变量名 in
值1) # 入口数据
指令1;;
值2) # 入口数据
指令2;;
值3) # 入口数据
指令3;;
*)
默认
esac注意:# 将变量名拿到值1、值2、值3中做等于比较,case做不了除等于以外的比较。
等于哪一个值,就执行对应的指令。;;表示结束 。
若都没有匹配上,则会自动匹配*),并执行对应的默认命令
2.3.2.执行过程
case语句会将该变量的值与 括号中的值相比较,如果与某个值相等,则执行对应语句。
当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。
如果没有与任何一个值相匹配,则执行*)后面的一组语句
例10:
编写脚本choice10.sh,对上例6的百分制成绩判断等级成绩进行改写
[root@server a1]# vim choice10.sh
read -p "请输入百分制成绩:" scorecase $score in9[0-9]|100)echo "等级A";;8[0-9])echo "等级B";;6[0-9]|7[0-9])echo "等级C";;[0-9]|[1-5][0-9])echo "等级D";;*)echo "请输入百分制成绩!!谢谢!" esac
相关文章:
流程控制之条件判断
目录 流程控制之条件判断 2.1.if语句语法 2.1.1单分支结构 2.1.2双分支结构 2.1.3多分支结构 2.2.案例 例一: 例2: 例3: 例4: 例5: 例6: 例7: 例8: 例9: 2.3.case多条件判断 2.3.1.格式 2.3.2.执行过程 例10: 流程控制之条件判断 2.1.if语句语法 2.1.1单分…...
2 - Electron 核心概念
Electron 核心概念 主进程 通过Node.js、Electron提供的API与系统底层打交道启动项目时运行的 main.js 脚本就是我们说的主进程。在主进程运行的脚本可以以创建 Web 页面的形式展示 GUI。主进程只有一个 渲染进程 每个 Electron 的页面都在运行着自己的进程,这样…...
Cmake找不到mysql.h和libmysqlclient.so
查看mysql.h和libmysqlclient.so的路径 eikeik-Virtual-Machine:~/桌面/dbpool/bin$ locate mysql.h /usr/include/mysql/mysql.h eikeik-Virtual-Machine:~/桌面/dbpool/bin$ locate libmysqlclient.so /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib/x86_64-linux-g…...
图论——二分图
图论——二分图 二分图通俗解释 有一个图,将顶点分成两类,边只存在不同类顶点之间,同类顶点之间设有边。称图 G 为二部图,或称二分图,也称欧图。 性质 二分图不含有奇数环图中没有奇数环,一定可以转换为二…...
国产浪潮服务器:风扇免手动调节脚本
简介:浪潮集团,是中国本土顶尖的大型IT企业之一,中国领先的云计算、大数据服务商。浪潮集团旗下拥有浪潮信息、浪潮软件、浪潮国际,业务涵盖云计算、大数据、工业互联网等新一代信息技术产业领域,为全球120多个国家和地…...
智能科技企业网站搭建的作用是什么
随着科学技术快速提升,各种智能产品随之而来,每个赛道里都涌入了大量企业商家,有些热门产品更是广受关注,对企业来说,形象、品牌、信息等方面需要完美呈现到用户眼前,而网站无疑是很好的工具。 企业通过【…...
【多组学数据驱动的机器学习:生物医学研究的创新与突破】
简介:随着生物医学研究的不断发展,多组学数据在疾病预防、诊断和治疗方面发挥着越来越重要的作用。本文将介绍如何利用机器学习技术对多组学数据进行综合分析,以及这种方法在生物医学研究中的优势和潜力。 正文: 一、多组学数据…...
AI影响谷歌正在推出新的人工智能模型,用于医疗保健。以下是医生如何使用它们的介绍
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
云仓酒庄带您品法国葡萄酒
说起葡萄酒肯定绕不开法国,法国葡萄酒闻名中外,口碑卓越。作为世界上的产酒大国,可以说是每一寸土地都可以种植葡萄。云仓酒庄的品牌雷盛红酒分享这么优秀的一个葡萄酒产酒国有哪些特点呢? 1.产区特色:波国有最著名的…...
XIAO ESP32S3之实现口罩检测
一、例程介绍 此例程是运行FOMO 轻量检测模型实现人员佩戴口罩检测,Demo中已包含训练好的模型参数,无需再训练。 FOMO(Faster Objects, More Objects) 是由 Edgeimpulse 工程师提出的一种轻量级的目标检测模型,其主要特点是模型非常小&#…...
LVS简介及LVS-NAT负载均衡群集的搭建
目录 LVS群集简介 群集的含义和应用场景 性能扩展方式 群集的分类 负载均衡(LB) 高可用(HA) 高性能运算(HPC) LVS的三种工作模式 NAT 地址转换 TUN IP隧道 IP Tunnel DR 直接路由 Direct Rout…...
ElasticSearch之cat segments API
命令样例如下: curl -X GET "https://localhost:9200/_cat/segments?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下: index shard prirep ip segment g…...
docker镜像与容器的迁移
docker容器迁移有两组命令,分别是 save & load :操作的是images, 所以要先把容器commit成镜像export & import:直接操作容器 我们先主要看看他们的区别: 一 把容器打包为镜像再迁移到其他服务器 如把mysq…...
Cmake基础(2)
使用一个简单的示例来应用cmake,无任何三方库的单一的应用程序项目 你可以收获 使用cmake生成VS项目生成mingw项目(makefile) 1 首先新建一个cpp,我们要做一个控制台应用程序 #include<iostream> void main(){std::cout<<"hello cm…...
OSPF理论总结与实验
第1章 OSPF[1] 本章阐述了OSPF协议的特征、术语,OSPF的路由器类型、网络类型、区域类型、LSA类型,OSPF报文的具体内容及作用,描述了OSPF的邻居关系,通过实例让读者掌握OSPF在各种场景中的配置。 本章包含以下内容: …...
浅谈安科瑞无线测温产品在巴西某工厂的应用
摘 要:高压开关设备是变电站和配电站中保证电力系统安全运行的重要设备之一,因此,开关柜的稳定运行对于整个电力系统有非常重要的意义。设备老化、长期高负荷运行都可能使设备局部温度过高而发生火灾,因此,对变电站内的敏感设备进行温度检测变得尤为重要…...
RabbitMQ 命令
Docker # 进入容器 > docker exec -it rabbitmq /bin/bash# 帮助 > rabbitmq-service help# 查看所有队列 > rabbitmqctl list_queues Windows 进入安装目录【D:\Program Files\RabbitMQ Server\rabbitmq_server-3.9.10\sbin】输入cmd # 帮助 > rabbitmq-servic…...
数据库系列之简要对比下GaussDB和OpenGauss数据库
GaussDB作为一款企业级的数据库产品,和开源数据库OpenGauss之间又是什么样的关系,刚开始接触的时候是一头雾水,因此本文简要对比下二者的区别,以加深了解。 1、GaussDB和OpenGauss数据库简要对比 GaussDB是华为基于PostgreSQL数据…...
FFmpeg的AVInputFormat
文章目录 结构体定义操作函数支持的AVOutputFormat 通过上面的分析,基本可以看到ffmpeg的套路了,首先一个context上下文,上下文里面一个priv_data 指针,然后再插件结构体中有一个priv_data_size,然后回调函数。 结构体…...
SQL命令---删除字段
介绍 使用sql语句删除表字段。 命令 alter table 表名 drop 字段名;例子 删除a表中的name字段。 alter table a drop name;下面是执行删除后的表结构:...
深入探讨 Python 中的装饰器和上下文管理器
Python 作为一门灵活而强大的语言,提供了许多高级特性,其中装饰器(Decorators)和上下文管理器(Context Managers)是其中两个非常有用的概念。这两个功能性特性提供了对代码结构和行为进行修改和控制的强大工…...
比whatsapp效果好---Google Messages RCS协议消息推送
这段时间由于使用谷歌手机Pixel 7 ( Android13)研究改机room,看了很多相关的资料,测试研究了谷歌生态很多软件功能。结果就是改机Room还没编译成功,反而是测试出Google Messages群发功能的bug,算是一个惊喜…...
HBuilder X
选择一款编程软件有以下几个好处: (1)提高效率:编程软件通常强调代码编辑和自动完成,可以帮助程序员更快速、更准确地输入代码。 (2)降低错误率:编程软件还可以检测代码中的错误&a…...
异地现场工控设备,如何实现远程配置、调试?
南京某企业专注于工业物联领域,在相关项目中往往会在各个点位部署基于Linux系统的中控主机,实现各类物联设备信息的采集、汇总。但是,由于各点位分散多地,且数量达到了上百个,虽然中控主机具备4G物联网接入能力&#x…...
C++报错:error C2238: 意外的标记位于“;”之前
报错信息如下: 编译遇见这样的错误信息主要有一下几种: 情况一: 多数情况下出现这种问题的原因是因为头文件重复包含:即头文件A包含了B,头文件B又包含了A,导致编译器在加载头文件时陷入死循环。 解决办法…...
五、Microsoft群集服务(MSCS)环境的搭建
一、【目的】 学会利用Windows Server布置群集环境。 二、【设备】 FreeNAS11.2,Windows Server 2019 三、【要求】 学会利用Windows Server布置群集环境,掌握处理问题的能力。 配置表: 节点公网IP(public)内网IP(private)群集IP(clust…...
通义千问 Qwen-72B-Chat在PAI-DSW的微调推理实践
01 引言 通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上,使用对齐机制打造的…...
web应用体系以及windows网络常见操作应用
本课程目标 1.Dos命令(必须掌握) 2.网络体系(笔试选择填空题) 3.搭建windows测试环境 一、Dos命令 1.DOS窗口启动 启动方式1.进入DOS页面:win+R,键入cmd 启动方式2.开始-运行--输入cmd-回车,此时将出现一个显示命令提示符的窗口,如下图 2、常见的Dos命令: 1、cd…...
FFmpeg 安装配置
FFmpeg 安装配置 依赖包 sudo apt-get install -y autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel x264-develsudo apt-get install yasm -y安装 wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.bz2tar -…...
14:00面试,14:08就出来了,问的问题有点变态。。。。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
网站建设新闻 常识/百度pc网页版入口
更多渗透技能 欢迎搜索公众号:白帽子左一一、Python反序列化 与PHP存在反序列化一样 Python也存在反序列化漏洞、并且Python反序列化更加强大 除了能反序列化当前代码中出现的类(包括import引入的模块中的类) 还能反序列化types创建的匿…...
网站开发的书/关键词排名查询网站
转自:http://www.jb51.net/article/84924.htm取整(向下取整):复制代码代码如下:select floor(5.534) from dual;select trunc(5.534) from dual;上面两种用法都可以对数字5.534向下取整,结果为5.如果要向上取整 ,得到结果为6&…...
单页网站怎么赚钱/seo全网优化指南
2019独角兽企业重金招聘Python工程师标准>>> public class BaseViewHoler extends RecyclerView.ViewHolder {private Context context;//行布局的viewprivate View mView;//用来装载id的集合 用法和map类似private SparseArray<View> sparseArray;public Bas…...
广元建设网站/服务器ip域名解析
1 package day03;2 3 public class DoWhileDemo01 {4 /*5 格式:6 初始化语句:7 do {8 循环体语句;9 条件控制语句; 10 } 11 while(条件判断语句…...
seo怎么收费/外贸谷歌优化
3.如何确定行数与列数 ①如果我们直接往TableLayout中添加组件的话,那么这个组件将占满一行!!!②如果我们想一行上有多个组件的话,就要添加一个TableRow的容器,把组件都丢到里面!③tablerow中的组件个数就决定了该行有多少列,而列…...
招聘网站报表怎么做/网站建设方案书 模板
2019独角兽企业重金招聘Python工程师标准>>> 通过DAL(Data Access Layer)可以做到在公司范围提供统一的数据库访问方式以降低总体的开发成本避免由于技术人员水平不同而造成的相同功能实现方式,标准,质量不一至;集中优势人员&…...