当前位置: 首页 > news >正文

流程控制之条件判断

目录

流程控制之条件判断

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 条件表达式2

        then
                指令序列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.s
read -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 的页面都在运行着自己的进程&#xff0c;这样…...

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

图论——二分图

图论——二分图 二分图通俗解释 有一个图&#xff0c;将顶点分成两类&#xff0c;边只存在不同类顶点之间&#xff0c;同类顶点之间设有边。称图 G 为二部图&#xff0c;或称二分图&#xff0c;也称欧图。 性质 二分图不含有奇数环图中没有奇数环&#xff0c;一定可以转换为二…...

国产浪潮服务器:风扇免手动调节脚本

简介&#xff1a;浪潮集团&#xff0c;是中国本土顶尖的大型IT企业之一&#xff0c;中国领先的云计算、大数据服务商。浪潮集团旗下拥有浪潮信息、浪潮软件、浪潮国际&#xff0c;业务涵盖云计算、大数据、工业互联网等新一代信息技术产业领域&#xff0c;为全球120多个国家和地…...

智能科技企业网站搭建的作用是什么

随着科学技术快速提升&#xff0c;各种智能产品随之而来&#xff0c;每个赛道里都涌入了大量企业商家&#xff0c;有些热门产品更是广受关注&#xff0c;对企业来说&#xff0c;形象、品牌、信息等方面需要完美呈现到用户眼前&#xff0c;而网站无疑是很好的工具。 企业通过【…...

【多组学数据驱动的机器学习:生物医学研究的创新与突破】

简介&#xff1a;随着生物医学研究的不断发展&#xff0c;多组学数据在疾病预防、诊断和治疗方面发挥着越来越重要的作用。本文将介绍如何利用机器学习技术对多组学数据进行综合分析&#xff0c;以及这种方法在生物医学研究中的优势和潜力。 正文&#xff1a; 一、多组学数据…...

AI影响谷歌正在推出新的人工智能模型,用于医疗保健。以下是医生如何使用它们的介绍

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

云仓酒庄带您品法国葡萄酒

说起葡萄酒肯定绕不开法国&#xff0c;法国葡萄酒闻名中外&#xff0c;口碑卓越。作为世界上的产酒大国&#xff0c;可以说是每一寸土地都可以种植葡萄。云仓酒庄的品牌雷盛红酒分享这么优秀的一个葡萄酒产酒国有哪些特点呢&#xff1f; 1.产区特色&#xff1a;波国有最著名的…...

XIAO ESP32S3之实现口罩检测

一、例程介绍 此例程是运行FOMO 轻量检测模型实现人员佩戴口罩检测&#xff0c;Demo中已包含训练好的模型参数&#xff0c;无需再训练。 FOMO(Faster Objects, More Objects) 是由 Edgeimpulse 工程师提出的一种轻量级的目标检测模型&#xff0c;其主要特点是模型非常小&#…...

LVS简介及LVS-NAT负载均衡群集的搭建

目录 LVS群集简介 群集的含义和应用场景 性能扩展方式 群集的分类 负载均衡&#xff08;LB&#xff09; 高可用&#xff08;HA&#xff09; 高性能运算&#xff08;HPC&#xff09; LVS的三种工作模式 NAT 地址转换 TUN IP隧道 IP Tunnel DR 直接路由 Direct Rout…...

ElasticSearch之cat segments API

命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/segments?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; index shard prirep ip segment g…...

docker镜像与容器的迁移

docker容器迁移有两组命令&#xff0c;分别是 save & load &#xff1a;操作的是images&#xff0c; 所以要先把容器commit成镜像export & import&#xff1a;直接操作容器 我们先主要看看他们的区别&#xff1a; 一 把容器打包为镜像再迁移到其他服务器 如把mysq…...

Cmake基础(2)

使用一个简单的示例来应用cmake&#xff0c;无任何三方库的单一的应用程序项目 你可以收获 使用cmake生成VS项目生成mingw项目(makefile) 1 首先新建一个cpp&#xff0c;我们要做一个控制台应用程序 #include<iostream> void main(){std::cout<<"hello cm…...

OSPF理论总结与实验

第1章 OSPF[1] 本章阐述了OSPF协议的特征、术语&#xff0c;OSPF的路由器类型、网络类型、区域类型、LSA类型&#xff0c;OSPF报文的具体内容及作用&#xff0c;描述了OSPF的邻居关系&#xff0c;通过实例让读者掌握OSPF在各种场景中的配置。 本章包含以下内容&#xff1a; …...

浅谈安科瑞无线测温产品在巴西某工厂的应用

摘 要&#xff1a;高压开关设备是变电站和配电站中保证电力系统安全运行的重要设备之一,因此,开关柜的稳定运行对于整个电力系统有非常重要的意义。设备老化、长期高负荷运行都可能使设备局部温度过高而发生火灾&#xff0c;因此,对变电站内的敏感设备进行温度检测变得尤为重要…...

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作为一款企业级的数据库产品&#xff0c;和开源数据库OpenGauss之间又是什么样的关系&#xff0c;刚开始接触的时候是一头雾水&#xff0c;因此本文简要对比下二者的区别&#xff0c;以加深了解。 1、GaussDB和OpenGauss数据库简要对比 GaussDB是华为基于PostgreSQL数据…...

FFmpeg的AVInputFormat

文章目录 结构体定义操作函数支持的AVOutputFormat 通过上面的分析&#xff0c;基本可以看到ffmpeg的套路了&#xff0c;首先一个context上下文&#xff0c;上下文里面一个priv_data 指针&#xff0c;然后再插件结构体中有一个priv_data_size&#xff0c;然后回调函数。 结构体…...

SQL命令---删除字段

介绍 使用sql语句删除表字段。 命令 alter table 表名 drop 字段名;例子 删除a表中的name字段。 alter table a drop name;下面是执行删除后的表结构&#xff1a;...

手把手教你用STM32F103驱动DS3231高精度时钟模块(附完整源码与避坑指南)

手把手教你用STM32F103驱动DS3231高精度时钟模块&#xff08;附完整源码与避坑指南&#xff09; 1. 硬件准备与连接 DS3231作为一款高精度实时时钟模块&#xff0c;其内部集成了温度补偿晶体振荡器(TCXO)&#xff0c;在-40C到85C范围内精度可达2ppm。与STM32F103的硬件连接主…...

OpenART mini变身智能小车“眼睛”:基于颜色识别的自动追踪实战(附完整Python代码)

OpenART mini变身智能小车“眼睛”&#xff1a;基于颜色识别的自动追踪实战 在智能机器人领域&#xff0c;视觉感知一直是赋予机器"智慧"的关键技术。而OpenART mini作为一款轻量级视觉模块&#xff0c;正逐渐成为创客和嵌入式开发者的首选工具。本文将带您深入探索如…...

为什么92%的团队把DeepSeek CQRS配错了?资深SRE曝光3个被文档刻意弱化的配置陷阱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的团队把DeepSeek CQRS配错了&#xff1f;资深SRE曝光3个被文档刻意弱化的配置陷阱 陷阱一&#xff1a;事件序列号&#xff08;Sequence ID&#xff09;与数据库事务隔离级别的隐式冲突 Deep…...

告别重复操作:M9A如何用智能自动化重塑《重返未来:1999》游戏体验

告别重复操作&#xff1a;M9A如何用智能自动化重塑《重返未来&#xff1a;1999》游戏体验 【免费下载链接】M9A 重返未来&#xff1a;1999 小助手 | Assistant For Reverse: 1999 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 在当今快节奏的生活中&#xff0c;游戏…...

如何快速解锁NCM加密音乐:NcmppGui完整使用指南

如何快速解锁NCM加密音乐&#xff1a;NcmppGui完整使用指南 【免费下载链接】ncmppGui 一个使用C编写的极速ncm转换GUI工具 项目地址: https://gitcode.com/gh_mirrors/nc/ncmppGui 你是否曾经下载了喜欢的音乐&#xff0c;却因为NCM格式的限制而无法在其他设备上播放&a…...

error while updating dependencies: node_modules包资源权限报错 缓存包构建

vue3vite - 解决报错error while updating dependencies:Error:EACCES:permission denied,mkdir ‘x‘&#xff08;系统权限问题&#xff09; 问题说明 在vite vue3项目开发中&#xff0c;出现报错: [vitel error while updating dependencies: Error:EACCES:permission deni…...

WandEnhancer终极指南:3步解锁完整WeMod高级功能

WandEnhancer终极指南&#xff1a;3步解锁完整WeMod高级功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod高级功能付费而烦恼吗&#xff…...

魔兽世界宏编辑器终极指南:5分钟掌握GSE高级技能自动化

魔兽世界宏编辑器终极指南&#xff1a;5分钟掌握GSE高级技能自动化 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. 项目地址: https://gitcode.com/gh_mirrors/gs/GSE-Advanced-Macro-Compi…...

保姆级教程:用Python和go-cqhttp给QQ群做个自动回复机器人(附完整代码)

从零构建智能QQ群机器人&#xff1a;Python与go-cqhttp实战指南 在社群运营中&#xff0c;自动回复机器人早已成为提升管理效率的利器。无论是处理高频咨询、新人引导&#xff0c;还是定时发布公告&#xff0c;一个配置得当的机器人能显著减轻管理员负担。本文将带你深入探索如…...

怎样免费去掉图片水印?2026年免费去水印工具推荐|在线vs软件对比

在日常工作和生活中&#xff0c;我们经常会遇到带有水印的图片。无论是来自社交媒体平台、在线图库还是其他来源&#xff0c;这些水印往往影响图片的使用效果。2026年&#xff0c;市面上出现了多种免费去水印工具&#xff0c;它们采用不同的技术方案&#xff0c;适用于不同的使…...