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

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...

rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...