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修…...
translategemma-27b-it惊艳效果:中文方言告示图→标准英文+语境适配翻译
translategemma-27b-it惊艳效果:中文方言告示图→标准英文语境适配翻译 你有没有遇到过这样的场景?在网上看到一张有趣的中文告示牌图片,上面可能还带着点方言口吻,你想分享给外国朋友,却不知道怎么翻译才能既准确又有…...
别只盯着速度!STM32G474 CCM SRAM在电机控制FOC算法中的实战避坑指南
STM32G474 CCM SRAM在电机控制FOC算法中的高阶应用与避坑指南 电机控制领域对实时性的苛刻要求,让每一位工程师都在与时间赛跑。当你的PID调节器因为几微秒的延迟导致电机震动,或是中断服务程序(ISR)响应不及时引发系统不稳定时,CCM SRAM这个…...
Java的CompletableFuture组合操作与异步流水线在微服务中的设计
Java的CompletableFuture组合操作与异步流水线在微服务中的设计 在微服务架构中,高并发与低延迟是核心需求。Java的CompletableFuture通过强大的异步编程能力,为微服务设计提供了高效的解决方案。它不仅能简化多线程任务编排,还能通过组合操…...
别再只传整数了!手把手教你用AXI4-Lite在ZYNQ里搞定浮点数传输(附完整Vivado工程)
别再只传整数了!手把手教你用AXI4-Lite在ZYNQ里搞定浮点数传输(附完整Vivado工程) 在ZYNQ的软硬件协同开发中,数据交互是最基础却最容易踩坑的环节。许多开发者习惯性地使用整型数据进行PS与PL间的通信,直到某天需要传…...
Arduino nRF5x低功耗库:深度解析SYSTEM_OFF与CONSTANT_LATENCY模式
1. 项目概述 Arduino nRF5x_lowPower 是专为 Nordic Semiconductor nRF5x 系列 SoC(如 nRF52832、nRF52840、nRF51822)设计的 Arduino 兼容低功耗管理库。它并非简单封装睡眠函数,而是深度对接 nRF5x 片上电源管理单元(PMU&…...
SparkFun MetaWatch Arduino库深度解析:蓝牙SPP嵌入式控制
1. SparkFun MetaWatch Arduino库深度解析:蓝牙智能手表的嵌入式控制实践1.1 项目背景与工程定位MetaWatch 是2013年前后推出的早期开源智能手表平台,其核心价值在于完全开放的硬件设计与通信协议。SparkFun 推出的SFE_MetaWatchArduino 库并非通用蓝牙协…...
嵌入式TFTP服务器库TFTPServer深度解析与移植指南
1. TFTPServer嵌入式TFTP服务器库深度解析TFTP(Trivial File Transfer Protocol)作为轻量级文件传输协议,在嵌入式系统固件升级、配置文件下发、日志回传等场景中具有不可替代的地位。其基于UDP的无连接特性、极简的状态机设计、零会话开销等…...
ESP8266轻量级Homie物联网框架封装库
1. 项目概述 simple-homie-iot-rc433 是一个面向 ESP8266 平台(亦可适配 ESP32)的轻量级 Homie 物联网框架封装库,其核心定位并非从零实现 Homie 协议栈,而是对 homie-iot/esp 官方库进行工程化抽象与使用模式简化。它不引入新…...
智能客服场景落地:CLIP-GmP-ViT-L-14理解用户截图与问题描述
智能客服场景落地:CLIP-GmP-ViT-L-14理解用户截图与问题描述 你有没有遇到过这种情况?作为软件或电商平台的客服,每天要处理大量用户咨询。用户发来的消息常常是:“我的订单页面卡住了,你看!”然后附上一张…...
计算机毕业设计:Python城市空气污染智能分析系统 Django框架 可视化 数据分析 Prophet时间序列 大数据 大模型 深度学习(建议收藏)✅
1、项目介绍 技术栈 采用 Python 语言开发,基于 Django 框架搭建后端服务,前端使用 Echarts 实现数据可视化,结合 HTML 构建页面结构,运用 Prophet 时间序列算法模型进行空气质量预测。 功能模块系统主页综合评估分析分布与…...
