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
补考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat Session 集群 ---------会话保持

一、 负载均衡、反向代理 环境搭建&#xff1a; nginx服务器192.168.246.7 tomcat 1服务器192.168.246.8 tomcat 2服务器192.168.246.9 7-1 nginx服务器搭建 [rootzzcentos1 ~]#systemctl stop firewalld [rootzzcentos1 ~]#setenforce 0 [rootzzcentos1 ~]#yum install …

springboot“财来财往”微信小程序

摘 要 相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低理财公司的运营人员成本&#xff0c;实现了“财来财往”的标准化、制度化、程序化的管理&#xff0c;有效地防止了“财来财往”的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能…

HTTP和HTTPS的区别,HTTPS加密原理是?

HTTP和HTTPS都是网络传输协议&#xff0c;主要用于浏览器和服务器之间的数据传输&#xff0c;但它们在数据传输的安全性、加密方式、端口等方面有所不同。 数据传输的安全性&#xff1a;HTTP是明文传输&#xff0c;数据不加密&#xff0c;容易被黑客窃听、篡改或者伪造&#x…

NeRF学习——NeRF-Pytorch的源码解读

学习 github 上 NeRF 的 pytorch 实现项目&#xff08;https://github.com/yenchenlin/nerf-pytorch&#xff09;的一些笔记 1 参数 部分参数配置&#xff1a; 训练参数&#xff1a; 这段代码是在设置一些命令行参数&#xff0c;这些参数用于控制NeRF&#xff08;Neural Radi…

OpenCV 图像重映射函数remap()实例详解

OpenCV 图像重映射函数remap()对图像应用通用几何变换。其原型如下&#xff1a; void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation&#xff0c; int borderMode BORDER_CONSTANT&#xff0c; const Scalar & borde…

回答自己一年前的一个问题,python如何动态拼接sql

首先谈谈应用场景吧&#xff0c;前提是针对查询接口做接口自动化&#xff0c;接口校验的脚本中&#xff0c;一般以响应报文作为预期值&#xff0c;通过sql查出的数据库值作为实际值&#xff0c;二者对比通过则认为接口输出正确。而sql从何而来呢&#xff0c;对于查询接口一般是…

perl 用 XML::DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi&#xff0c;装完后有520MB&#xff0c;建议安装在D:盘。 运行 …

HarmonyOS NEXT应用开发—组件堆叠

介绍 本示例介绍运用Stack组件以构建多层次堆叠的视觉效果。通过绑定Scroll组件的onScroll滚动事件回调函数&#xff0c;精准捕获滚动动作的发生。当滚动时&#xff0c;实时地调节组件的透明度、高度等属性&#xff0c;从而成功实现了嵌套滚动效果、透明度动态变化以及平滑的组…

【论文阅读】Energy Efficient Real-time Task Scheduling on CPU-GPU Hybrid Clusters

Energy Efficient Real-time Task Scheduling on CPU-GPU Hybrid Clusters 出处&#xff1a;2017IEEE Xplore 基于CPU-GPU混合集群的高效实时任务调度 主要工作&#xff1a;通过动态电压和频率缩放研究了新兴CPU-GPU混合集群的节能问题。 首次分析GPU特定的DVFS模型。 设计了…

Web核心,HTTP,tomcat,Servlet

1&#xff0c;JavaWeb技术栈 B/S架构:Browser/Server&#xff0c;浏览器/服务器架构模式&#xff0c;它的特点是&#xff0c;客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器&#xff0c;获取Web资源&#xff0c;服务器把Web资源…

安装snap再安装flutter再安装localsend@Ubuntu(FreeBSD下未成功)

Localsend介绍 localsend是一个跨平台的文件传送软件&#xff0c;可以在Windows、MacOS、Linux、Android和IOS下互相传送文件&#xff0c;只要在同一个局域网即可。 localsend官网&#xff1a;LocalSend 尝试安装localsend&#xff0c;发现需要使用flutter&#xff0c; 安装f…

阿里二面:什么情况会发生Full GC?如何避免频繁Full GC?

阿里二面&#xff1a;什么情况会发生Full GC&#xff1f;如何避免频繁Full GC&#xff1f; Minor GC、Major GC 和 Full GC区别&#xff1f; Minor GC、Major GC和Full GC是垃圾回收中的三个重要概念&#xff0c;它们描述了垃圾回收的不同阶段和范围&#xff1a; Minor GC&am…

自定义协议

应用层 有许多现成的协议(HTTP协议做网站必备),也有许多需要程序员自定义的协议. 1.自定义协议 自定义协议: 1.明确传递的信息是什么 2.约定好信息按照什么样的格式来组织成二进制字符串 举个例子: 当我们点外卖时,打开软件,会显示商家列表,列表中有很多项,每一项都包含了一…

Tuxera NTFS 2023安装使用教程 Tuxera NTFS破解版 Tuxera NTFS for Mac优惠

对于必须在Windows电脑和Mac电脑之间来回切换的Mac朋友来说&#xff0c;跨平台不兼容一直是一个巨大的障碍&#xff0c;尤其是当我们需要使用NTFS格式的硬盘在Windows和macOS之间共享文件时。因为Mac默认不支持写入NTFS磁盘。 为了解决这一问题&#xff0c;很多朋友会选择很便捷…

React理念——Fiber架构的主要原理

React理念——Fiber架构的主要原理 React 理念CPU 的瓶颈IO 的瓶颈 Fiber的产生及原理如何构建副作用链表 React 理念 从官网看到React的理念&#xff1a; React 是用 JavaScript 构建快速响应的大型 Web 应用程序的首选方式。它在 Facebook 和 Instagram 上表现优秀。 可见&a…

对LitJson开源插件的自定义尝试

简介 LitJson是一款知名的Json字符串数据转换的插件&#xff0c;基于.Net开发&#xff0c;使用C#作为开发语言。本文旨在基于所学的编程知识以及对LitJson源码的理解来尝试对LitJson插件进行自定义。 自定义思路 &#xff08;一&#xff09;问题 结合我在使用LitJson过程中遇到…

Selenium基础

1. selenium简介 用于实现自动化测试的 python 包&#xff0c;使用前需要安装对应浏览器驱动 from time import sleep from selenium import webdriver option webdriver.ChromeOptions() # 指定chrome存储路径的二进制形式 option.binary_locationD:\Chrome\Google\Chrome\Ap…

企业计算机服务器中了halo勒索病毒怎么办,halo勒索病毒解密工具流程

随着网络技术的不断应用与发展&#xff0c;越来越多的企业开始利用网络开展各项工作业务&#xff0c;网络为企业的发展与生产生活提供了极大便利。但网络中的勒索病毒攻击企业服务器的事件频发&#xff0c;给企业的数据安全带来了严重威胁&#xff0c;数据安全问题一直是企业关…

pytorch CV入门 - 汇总

初次编辑&#xff1a;2024/2/14&#xff1b;最后编辑&#xff1a;2024/3/9 参考网站-微软教程&#xff1a;https://learn.microsoft.com/en-us/training/modules/intro-computer-vision-pytorch 更多的内容可以参考本作者其他专栏&#xff1a; Pytorch基础&#xff1a;https…

ArrayList 源码解析和设计思路

ArrayList 一、继承体系二、接口继承三、标记接口四、设计目的五、框架总体结构六、工作原理七、创建List对象初始化&#xff1f;还是add()添加元素初始化?七、add(E e)添加元素八、remove&#xff08;int index&#xff09;删除元素八、线程安全问题 一、继承体系 ArrayLis…