Linux之shell条件判断
华子目录
- if语句
- 单分支
- 案例
- 双分支
- 案例
- 多分支
- case多条件判断
- 格式
- 执行过程
- 示例
if语句
单分支
# 语法1:
if <条件表达式>
then指令
fi
#语法2:
if <条件表达式>;then指令
fi
案例
- 编写脚本choice1.sh,利用单分支结构实现输入2个整数,判断最大值后输出($符相当于取值符号)
[root@server ~]# vim choice1.sh
#!/bin/bash
read -p "请输入第一个整数: " x
read -p "请输入第二个整数: " y
max=$x
if (($max<$y))
then max=$y
fi [root@server ~]# bash choice1.sh
请输入第一个整数:6
请输入第二个整数:3
最大值:6
- 编写脚本choice3.sh ,判断当前脚本的执行者身份,若不是root账户执行则输出提示,并退出
# 检查当前账户4种方法:
[root@server ~]# whoami
root
[root@server ~]# id -u
0
[root@server ~]# echo $USER
root
[root@server ~]# echo $UID
0
[root@server ~]# vim choice3.sh
#!/bin/bash
if [ "$USER" != "root" ]
thenecho "please switch user root"
fi[root@server ~]# mv choice3.sh / # 移动脚本到根
[root@server ~]# su redhat # 切换账户身份
[fox@server root]$ cd /
[fox@server /]$ bash choice3.sh
please switch user root
双分支
if <条件表达式>
then指令序列1
else指令序列2
fi
案例
- 面试题:编写脚本choice2.sh,使用双分支判断当前系统的剩余内存大小,若低于100M则发送消息进行告警
[root@server ~]# vim choice2.sh
#!/bin/bash
free_mem=$(free -m | grep Mem | tr -s " " | cut -d " " -f 4)
if (($free_mem<100))
thenecho "警告,剩余内存为:$free_mem,低于100MB"
elseecho "剩余内存为:$free_mem,空间足够"
fi[root@server ~]# bash choice2.sh
剩余内存为:948,空间足够
- 编写脚本choice4.sh , 实现闰年的判断(闰年:能被4整除但不能被100整除或者能被400整除的年份)
[root@server ~]# vim choice4.sh
#!/bin/bash
read -p "请输入四位数年份:" year
if [ $(($year%4)) -eq 0 ] && [ $(($year%100)) -ne 0 ] || [ $(($year%400)) -eq 0 ]
thenecho "$year年是润年"
elseecho "$year年是平年"
fi[root@server ~]# bash choice4.sh
请输入四位数年份:2018
2018年是平年
[root@server ~]# bash choice4.sh
请输入四位数年份:2024
2024年是润年
- 编写脚本choice5.sh,判断sshd是否运行
# 分析
# 1.通过分析服务执行的进程数判断
[root@server ~]# ps -ef | grep 服务名 | grep -v grep | wc -l
# 2.通过查看是否开放端口判断
[root@server ~]# netstat -lntup | grep 端口号 | wc -l
[root@server ~]# vim choice5.sh
#!/bin/bash
num=$(ps -ef | grep sshd | grep -v grep | wc -l)
if (($num>0))
thenecho "sshd is running"
elseecho "sshd is not running"
fi[root@server ~]# bash choice5.sh
sshd is not running
- 编写脚本choice8.sh,检测主机是否存活
[root@server ~]# vim choice8.sh
#!/bin/bash
read -p "请输入测试主机的IP地址:" ip
ping -c 2 -w 3 $ip &> /dev/null
# -c 2 表示发出2个数据包,-w 3表示等待3秒结束,注意:不能等待1秒结束,有可能第二个包未返回就结束会报错
if [ $? -eq 0 ]
thenecho "主机$ip已运行"
elseecho "主机$ip未运行"
fi[root@server ~]# bash choice8.sh
请输入测试主机的IP地址:192.168.80.130
主机192.168.80.130未运行
# 上例修改,使用循环测试多台主机,存活的主机显示应用高亮的颜色显示
#!/bin/bashfor ip in 192.168.48.{125..135}
doping -c 2 -w 3 $ip &> /dev/nullif [ $? -eq 0 ]thenecho -e "\e[1;31m主机$ip已运行\e[0m"elseecho "主机$ip未运行"fi
done
多分支
if 条件表达式1
then指令序列1
elif 条件表达式2
then指令序列2
else指令序列n
fi
- 编写脚本choice6.sh , 输入百分制成绩,判断后输出等级成绩
[root@server ~]# vim choice6.sh
read -p "请输入百分制成绩: " score
if [ -z $score ]
thenecho "未输入,请重新输入."
elif (($score<0 || $score>100 ))
thenecho "成绩输入有误,请输入0-100间整数成绩"
elif (($score >= 90))
thenecho "成绩优秀"
elif (($score >=80))
thenecho "成绩良好"
elif (($score>=60))
thenecho "成绩及格"
elseecho "补考"
fi[root@server ~]# bash choice6.sh
请输入百分制成绩:
未输入,请重新输入
[root@server ~]# bash choice6.sh
请输入百分制成绩:100
成绩优秀
- 编写脚本choice7.sh,判断主机的cpu品牌
[root@server ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 186
model name : 13th Gen Intel(R) Core(TM) i7-13620H
stepping : 2
microcode : 0x410e
cpu MHz : 2918.399
cache size : 24576 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni arat umip pku ospke gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities
bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs itlb_multihit eibrs_pbrsb
bogomips : 5836.79
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 186
model name : 13th Gen Intel(R) Core(TM) i7-13620H
stepping : 2
microcode : 0x410e
cpu MHz : 2918.399
cache size : 24576 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 32
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni arat umip pku ospke gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities
bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs itlb_multihit eibrs_pbrsb
bogomips : 5836.79
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:[root@server ~]# grep "vendor_id" /proc/cpuinfo
vendor_id : GenuineIntel
vendor_id : GenuineIntel[root@server ~]# vim choice7.sh
#!/bin/bash
vendor=$(grep "vendor_id" /proc/cpuinfo | uniq | cut -d " " -f2)
if [ $vendor == GenuineIntel ]
thenecho "Inter"
elif [ $vendor == GenuineAMD ] # AuthenticAMD
thenecho "AMD"
elseecho "unknow"
fi[root@server ~]# bash choice7.sh
Inter
- 编写脚本choice9.sh,根据用户的输入内容,判断是数字、字母、其它字符
[root@server ~]# vim choice9.sh
#!/bin/bash
read -p "请输入字母、数字、其它字符: " str
if echo $str | grep [a-zA-Z] > /dev/null
thenecho "字母"
elif echo $str | grep [0-9] > /dev/null
thenecho "数字"
elseecho "字符"
fi[root@server ~]# bash choice9.sh
请输入字母,数字,其他字符:890
数字
[root@server ~]# bash choice9.sh
请输入字母,数字,其他字符:adg
字母
[root@server ~]# bash choice9.sh
请输入字母,数字,其他字符:!@#
字符
case多条件判断
格式
case 变量名 in值1)指令1;;值2)指令2;;值3)指令3 ;;*)默认
esac #结束case语句
执行过程
- case语句会将该变量的值与 )括号中的值相比较 ,如果与某个值相等,则执行对应语句。
- 当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。
- 如果没有与任何一个值相匹配,则执行*)后面的一组语句
示例
- 编写脚本choice10.sh,对上例7的百分制成绩判断等级成绩进行改写
[root@server ~]# vim choice10.sh
#!/bin/bash
read -p "请输入百分制成绩: " score
case $score in9[0-9]|100)echo "成绩优秀";;8[0-9])echo "成绩良好";;6[0-9]|7[0-9])echo "成绩及格";;*)echo "补考"
esac[root@server ~]# bash choice10.sh
请输入百分制成绩:99
成绩优秀
[root@server ~]# bash choice10.sh
请输入百分制成绩:9
补考
相关文章:
Linux之shell条件判断
华子目录 if语句单分支案例 双分支案例 多分支 case多条件判断格式执行过程示例 if语句 单分支 # 语法1: if <条件表达式> then指令 fi#语法2: if <条件表达式>;then指令 fi案例 编写脚本choice1.sh,利用单分支结构实现输入2个整数&#…...
“postinstall“: “patch-package“ 修补安装包补丁
在 package.json 文件里,postinstall 是一个钩子脚本,它在每次运行 npm install 命令后自动执行。当你在该字段中指定 "patch-package" 时,意思是在 npm install 安装所有依赖包之后,自动运行 patch-package 命令。 pa…...
PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包
近年来,电商行业的迅猛发展,越来越多的商户开始寻求搭建自己的在线商城。然而,传统的商城系统往往功能单一,无法满足商户个性化、多样化的需求。同时,搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…...
Node.js常用命令
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得开发者可以使用 JavaScript 来编写服务端的应用。Node.js 提供了大量的命令行工具,以下是一些最常用的 Node.js 命令: 1. node 运行 JavaScript 文件:node [fil…...
LeetCode 2. 两数相加
目录 题目题目描述示例 1:示例 2:示例 3:提示:原题链接 题解解题思路代码实现(C) 题目 题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的…...
抖去推无人直播+矩阵托管+AI文案撰写一体化工具如何开发搭建
一、 开发和搭建抖去推无人直播矩阵托管AI文案撰写一体化工具需要以下步骤: 确定功能需求:确定抖去推无人直播、矩阵托管和AI文案撰写的具体功能需求,如直播推流、直播管理、托管服务、AI文案生成等。 技术选型:选择适合开发该工…...
【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— 弹窗组件
简介 弹窗是移动应用中常见的一种用户界面元素,常用于显示一些重要的信息、提示用户进行操作或收集用户输入。ArkTS提供了多种内置的弹窗供开发者使用,除此之外还支持自定义弹窗,来满足各种不同的需求。 下面是所有涉及到的弹窗组件官方文档…...
【嵌入式学习】Qtday03.21
一、思维导图 二、练习 自由发挥登录窗口的应用场景,实现一个登录窗口界面。(不要使用课堂上的图片和代码,自己发挥,有利于后面项目的完成) 要求: 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…...
【C语言】C语言运算符优先级详解
文章目录 📝前言🌉运算符优先级简述 🌠逻辑与和逻辑或🌉赋值和逗号运算符 🌠位运算🌉条件表达式🌉位运算与算术运算结合🌉混合使用条件表达式和赋值运算符🌉 逗号运算符的…...
第十节HarmonyOS 常用容器组件3-GridRow
1、描述 栅格容器组件,仅可以和栅格子组件(GridCol)在栅格布局场景中使用。 2、子组件 可以包含GridCol子组件。 3、接口 GridRow(options:{columns: number | GridRowColumnOption, gutter?: Length | GutterOption, Breakpoints?: B…...
SCXI-1193是National Instruments公司生产的吗?
NI SCXI-1193是一款高密度、32通道RF多路复用器开关模块。 NI SCXI-1193 是一款由 National Instruments(NI)公司生产的屏蔽式电缆。这款电缆通常用于连接数据采集设备和传感器或执行器,以实现信号传输和数据采集。SCXI-1193 电缆具有高度灵活…...
使用clion开发tftlcd屏,移植驱动时遇到的问题记录
问题现象 屏幕只有一半屏在刷新 问题出现的情况(在CLION开发时遇到过) 总结...
工程信号的去噪和(分类、回归和时序)预测
🚀【信号去噪及预测论文代码指导】🚀 还为小论文没有思路烦恼么?本人专注于最前沿的信号处理与预测技术——基于信号模态分解的去噪算法和深度学习的信号(回归、时序和分类)预测算法,致力于为您提供最精确、…...
【VUE】前端阿里云OSS断点续传,分片上传
什么是OSS: 数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。如果要使用OSS存储数据,您需要先创建Bucket,并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后,您…...
春招面试高频题目总结
面试问题 redis 可以用于进程间通信吗? Why?How? ---> 延展一下 有哪些进程间通信技术, 优劣如何? 有大量的插入sql语句,一条条的插入性能很差,如何通过事务进行优化? 保证线程安全的策略有哪些&…...
基于SSM+Jsp+Mysql的KTV点歌系统
基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工…...
Docker Oracle提示密码过期
进入docker docker exec -it oracle bash 修改环境变量文件 vi .bash_profile 为以下内容 # .bash_profile# Get the aliases and functions if [ -f ~/.bashrc ]; then. ~/.bashrc fi# User specific environment and startup programsPATH$PATH:$HOME/binexport PATH expo…...
5.3、【AI技术新纪元:Spring AI解码】图像生成API
Spring 图像生成API Spring图像生成API旨在提供一个简单且便携的接口,用于与各类专注于图像生成的AI模型交互,使开发者能够在不同图像相关模型之间轻松切换,只需对代码进行最少的改动。这一设计遵循了Spring框架的模块化和可互换性理念,确保开发人员能够快速调整其应用程序…...
自营、入驻商城小程序开发
IT外包的隐形重负——沟通成本:当客户仅能提供大致需求,而IT公司则机械地执行,往往会导致项目细节中充满漏洞,用户体验大打折扣。 最终,项目不断延期,进度一拖再拖。探究其根源,客户往往并非IT…...
C++关键字:const
文章目录 一、const的四大作用1.修饰 变量、数组2.修饰 函数的形参、修饰 引用 (最常用)3.修饰 指针:常量指针、指针常量 、只读指针4.修饰 类的成员函数、修饰 类的对象 一、const的四大作用 1.修饰 变量、数组 1.const修饰变量: 被const修…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
