条件语句及if语句,case语句

news2024/12/23 0:47:14

文章目录

  • 条件语句
    • 一、测试
      • 1、概述
        • 格式
      • 2、文件测试
        • 2.1 格式
        • 2.2 常用操作符
      • 3、比较整数数值
        • 3.1 格式
        • 3.2 常用操作符
      • 4、字符串比较
        • 4.1 格式
        • 4.2 常用操作符
      • 5、逻辑测试(短路运算)
        • 5.1 格式
        • 5.2 常用操作符
      • 6、双中括号
        • 6.1 格式
        • 6.2 说明
    • 二、if语句
      • 1、单分支
      • 2、双分支
        • 详细操作
        • 详细操作图文详解
      • 3、多分支
        • 详细操作
        • 详细操作图文详解
    • 三、case语句
      • 格式
        • 详细操作
        • 详细操作图文详解

条件语句

一、测试

1、概述

  • test 测试文件的表达式,是否成立,若成功返回0,否则返回其他数值
格式
  • 格式1:test 条件表达式

  • 格式2:[ 条件表达式 ]

    注意中括号 [ ] 和表达式中间需要隔一个空格

2、文件测试

2.1 格式
  • [ 操作符 文件或目录 ]
2.2 常用操作符
操作符说明
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)(选择e判断文件是否存在)
-a测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为软连接文件
[root@localhost data]#[ -d /data ]
[root@localhost data]#echo $?
0
[root@localhost data]#ls
aaa.sh  fs.sh  fw.sh  qaz.sh  test.sh  ww.sh  xxx.sh
[root@localhost data]#touch 123
[root@localhost data]#ls
123  aaa.sh  fs.sh  fw.sh  qaz.sh  test.sh  ww.sh  xxx.sh
[root@localhost data]#[ -d /data/123 ]
[root@localhost data]#echo $?
1
[root@localhost data]#[ -e /etc/passwd ]
[root@localhost data]#echo $?
0

image-20240124180840684

3、比较整数数值

3.1 格式
  • [ 整数1 -操作符 整数2 ]
3.2 常用操作符
操作符说明
-eq第一个数等于(Equal)第二个数
-ne第一个数不等于(Not Equal)第二个数
-gt第一个数大于(Greater Than)第二个数
-ge第一个数大于或等于(Greater or Equal)第二个数
-lt第一个数小于(Lesser Than)第二个数
-le第一个数小于或等于(Lesser or Equal)第二个数
[root@localhost data]#who|wc -l
3
[root@localhost data]#[ $(who|wc -l) -le 5 ]
[root@localhost data]#echo $?
0
[root@localhost data]#[ $(who|wc -l) -ge 5 ]
[root@localhost data]#echo $?
1

image-20240124150055708

4、字符串比较

4.1 格式
  • [ 字符串1 = 字符串2 ] 是否相同

  • [ 字符串1 != 字符串2 ] 是否不相同

  • [ -z 字符串 ] 是否为空

  • [ -n 字符串 ] 字符是否存在

4.2 常用操作符
操作符说明
=字符串内容相同
!=字符串内容不同,! 号表示相反的意思
-z字符串内容为空
-n字符是否存在

5、逻辑测试(短路运算)

5.1 格式
  • [ 表达式1 ] 操作符 [ 表达式2 ] …
  • 命令1 操作符 命令2 …
5.2 常用操作符
操作符详细说明
逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为 0(结果成立)。
&&逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为 0(结果成立)。使用 test命令测试时,“&&”可改为“-a”。
ll逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为 0(结果成立)。使用 test 命令测试时,“||”可改为“-o”。
#判断当前用户是否为root,如果是,则反馈true
[root@localhost data]#whoami    #查看当前有效用户名
root
[root@localhost data]#[ `whoami` = root ] && echo "true"
true

#判断当前用户是否为张三,如果是,则反馈true;如果不是,则反馈false
[root@localhost data]#[ `whoami` = zhangsan ] && echo "true" || echo "false"
false

image-20240124183227102

##判断磁盘使用量,磁盘使用量超过80%时,提醒磁盘使用量过高
[root@localhost data]#vim scandisk.sh
#!/bin/bash
use=`df|tr -s " "|grep sda|cut -d " " -f5|tr -d %`
[ $use -ge 80 ] && echo "磁盘使用量过高"||echo "磁盘剩余量足够"

[root@localhost data]#bash scandisk.sh
磁盘剩余量足够
[root@localhost data]#cd /boot
[root@localhost boot]#dd if=/dev/zero of=bigfile
dd: 正在写入"bigfile": 设备上没有空间
记录了10100449+0 的读入
记录了10100448+0 的写出
5171429376字节(5.2 GB)已复制,15.852 秒,326 MB/秒
[root@localhost boot]#cd /data
[root@localhost data]#bash scandisk.sh
磁盘使用量过高

image-20240124185212777

image-20240124184944485

6、双中括号

6.1 格式
  • [[ ]]
6.2 说明
  • == :左侧字符串是否和右侧的PATTERN相同

    此表达式用于[[ ]]中,PATTERN为通配符

  • =~ :左侧字符串是否能够被右侧的PATTERN所匹配

    此表达式用于[[ ]]中,PATTERN为正则表达式

[root@localhost ~]#file=test.log
##通配符以log结尾的文件
[root@localhost ~]#[[ $file  == *.log   ]]
[root@localhost ~]#echo $?
0
##正则表达式以log结尾的文件
[root@localhost ~]#[[ $file  =~ log$   ]]
[root@localhost ~]#echo $?
0

image-20240124140758538

二、if语句

1、单分支

if   判断条件  ;then
执行的命令
fi

2、双分支

if   判断条件  ;then
执行的命令1
else
执行的命令2
fi
详细操作
##检查80端口是否开启,如果开启则反馈httpd正在运行,若是未开启,则启动服务
[root@localhost data]vim fw.sh
#!/bin/bash
systemctl status httpd &>/dev/null
if  [ $? -eq 0 ]
then
echo "httpd 服务正在运行"
else
systemctl start httpd
  if [ $? -eq 0 ]
  then
  echo "服务正常启动"
  else
  echo "服务异常,请检查"
  fi
fi
##若是服务已开启,则反馈
[root@localhost data]#bash fw.sh
httpd 服务正在运行
##若是服务未开启,则反馈
[root@localhost data]#bash fw.sh
服务正常启动
详细操作图文详解

image-20240124152857770

3、多分支

if 判断条件1
then
 执行命令1

elif 判断条件2
then
 执行命令2

elif 判断条件3
then
 执行命令3

...
else
 以上条件都为假的分支代码  托底

fi
详细操作
##安装httpd服务,先判断操作系统,如果是centos系统,则yum安装,若是ubuntu系统,则使用apt安装,其他暂不支持
[root@localhost data]#vim qaz.sh
#!/bin/bash
if grep -q centos /etc/os-release;then
yum install httpd -y &>/dev/null
  if [ $? -eq 0 ]
  then
  echo "安装成功"
  else
  echo "安装失败,请检查"
  fi
elif grep -q ubuntu /etc/os-release;then
apt install apache2 -y &>/dev/null
  if [ $? -eq 0 ]
  then
  echo "安装成功"
  else
  echo "安装失败,请检查"
  fi
else
echo "你的操作系统不支持"
fi
[root@localhost data]#bash qaz.sh
安装成功
[root@localhost data]#vim fs.sh
#!/bin/bash

read -p "请输入你的分数(0-100的正整数)" num

if [ $num -ge 90 -a $num -le 100 ];then
echo "优秀"
elif [ $num -ge 70 -a $num -le 89 ];then
echo "良好"
elif [ $num -ge 60 -a $num -le 69 ];then
echo "及格"
elif [ $num -ge  0 -a $num -le 59 ];then
echo "不及格"
else
echo "输入有误,请重新输入"
bash  $0
#输入错误时不会退出,可以继续输入
fi

[root@localhost data]#bash fs.sh
请输入你的分数(0-100的正整数)96
优秀
[root@localhost data]#bash fs.sh
请输入你的分数(0-100的正整数)84
良好
[root@localhost data]#bash fs.sh
请输入你的分数(0-100的正整数)54
不及格
[root@localhost data]#bash fs.sh
请输入你的分数(0-100的正整数)28
不及格
[root@localhost data]#bash fs.sh
请输入你的分数(0-100的正整数)112
输入有误,请重新输入
请输入你的分数(0-100的正整数)485
输入有误,请重新输入
请输入你的分数(0-100的正整数)66
及格
详细操作图文详解

image-20240124160706102

image-20240124163032916

三、case语句

  • case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个变量的不同取值

格式

case 变量值 in
模式 1)
	命令序列 1
	;;
模式 2)
	命令序列 2
	;;
    ……
* )
	默认命令序列
esac

case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。 
双分号“;;”表示命令序列的结束。 
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号 “|”表示或,如“A|B”。 
最后的“*)”表示默认模式,其中的*相当于通配符。
详细操作
##判断输入的是字母还是数字还是特殊符号
[root@localhost data]#vim xxx.sh
#!/bin/bash
read -p "请输入一个字符:"  kn
case  $kn in
[a-z]|[A-Z])
echo "你输入的是字母"
;;
[0-9])
echo "你输入的是数字"
;;
*)
echo "你输入的是特殊字符"
esac

[root@localhost data]#bash xxx.sh
请输入一个字符:5
你输入的是数字
[root@localhost data]#bash xxx.sh
请输入一个字符:y
你输入的是字母
[root@localhost data]#bash xxx.sh
请输入一个字符:/
你输入的是特殊字符
##判断输入的是yes或者no
[root@localhost ~]#vim ww.sh
#!/bin/bash
read -p "请输入yes或no:"  i
case $i in
[yY]|[yY][eE][sS])
echo "您输入的是yes"
;;
[nN]|[nN][oO])
echo "您输入的是no"
;;
*)
echo "您的输入有误,请重新输入"
bash $0
;;
esac

[root@localhost data]#bash ww.sh
请输入yes或no:Y
您输入的是yes
[root@localhost data]#bash ww.sh
请输入yes或no:No
您输入的是no
[root@localhost data]#
[root@localhost data]#bash ww.sh
请输入yes或no:5
您输入的有误,请重新输入
请输入yes或no:o
您输入的有误,请重新输入
请输入yes或no:e
您输入的有误,请重新输入
请输入yes或no:y
您输入的是yes
详细操作图文详解

image-20240124171048333
image-20240124172634607

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

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

相关文章

DA14531平台secondary_bootloade工程修改笔记

DA14531平台secondary_bootloade工程修改笔记 1.支持在线仿真 初始时加入syscntl_load_debugger_cfg(); 表示可以重复Jlink连接调试仿真 2.支持串口烧录,和支持单线线写 utilities\secondary_bootloader\includes\bootloader.h /************** 2-wire UART supp…

程序媛的mac修炼手册-- 如何用Python节省WPS会员费

上篇分享了如何用微博爬虫,咱举例爬了女明星江疏影的微博数据。今天就用这些数据,给大家安利一下怎么用Python实现WPS中部分Excel付费功能。 MacOS系统自带的工具,绝大多数都非常顶,除Numbers外。当然,page比起word来&…

ubuntu 22.04 安装mysql-8.0.34

ubuntu 22.04 安装mysql-8.0.34 1、基础安装配置 更新软件包: sudo apt update查看可用软件包: sudo apt search mysql-server安装最新版本: sudo apt install -y mysql-server或者,安装指定版本: sudo apt inst…

vue3实现在浏览器之外打开新窗口,新窗口只有原来的一半并且居中显示

首先在router下的index.js添加路由地址 {name: attribute,path: /attribute,component: () > import(../views/attribute.vue)},然后在方法中调用 //点击按钮 function clicek() {openCenteredWindow(/attribute, 1400, 800);} // 计算居中位置function calculateCenterPos…

live555在拉流时应对多路码流传输带宽问题的几种处理思路

处理带宽管理和调整的机制 Live555库本身并没有直接处理带宽管理和调整的机制,因为它主要是一个用于实现RTSP流媒体服务器和客户端的库,而带宽管理通常是在应用层进行处理的。但Live555支持一些基础协议,这些协议可以在应对带宽问题时进行使用…

qt初入门6:QChar和QString相关接口练习

简单了解编码: ​ latin1(ISO 8859-1)字符集是对ASCII基本字符集的扩展,都是1字节编码。 Unicode编码有多重存储方案,utf-8使用1~4字节编码,最少1字节;utf-16使用2-4字节编码,最少2字…

Zabbix 整合 Prometheus:案例分享与操作指南

一、简介 Zabbix 和 Prometheus 都是流行的开源监控工具,它们各自具有独特的优势。Zabbix 主要用于网络和系统监控,而 Prometheus 则专注于开源的分布式时间序列数据库。在某些场景下,将这两个工具整合在一起可以更好地发挥它们的优势&#…

树,二叉树及其相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&#…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界?探索多模态模型种视觉编码器的缺陷。 论文中指出,上面这些VQA问题,人类可以瞬间给出正确的答案,但是多模态给出的结果却是错误的。是哪个环节出了问题呢?视觉编码器的问题?大语言模型出现了幻觉&…

redis集群 —— 高性能

文章目录 前言节点1.1 启动节点 槽指派2.1 记录节点的槽指派信息2.2 传播节点的槽指派信息2.3 记录集群所有槽的指派信息 在集群中执行命令3.1 计算键属于哪个槽3.3 节点数据库的实现 重新分片复制与故障转移 前言 Redis集群是Redis提供的分布式数据库方案,集群通过…

vp9协议笔记

vp9协议笔记📒 本文主要是对vp9协议的梳理,协议的细节参考官方文档:VP9协议链接(需要加速器) vp9协议笔记 vp9协议笔记📒1. 视频编码概述2. 超级帧superframe(sz):2. fr…

ZK高可用架构涉及常用功能整理

ZK高可用架构涉及常用功能整理 1. zk的高可用系统架构和相关组件1.1 Quorum机制1.2 ZAB协议 2. zk的核心参数2.1 常规配置2.2 特殊优化配置 3. zk常用命令3.1 常用基础命令3.2 常用运维命令 4. 事务性4.1 数据写流程4.2 数据读流程 5. 疑问和思考5.1 zk不擅长处理哪些场景&…

springboot家乡特色推荐系统源码和论文

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括家乡特色推荐的网络应用,在外国家乡特色推荐系统已经是很普遍的方式,不过国内的管理网站可能还处于起步阶段。家乡特色推荐系统采用java技术&#xff0…

橘子学Mybatis08之Mybatis关于一级缓存的使用和适配器设计模式

前面我们说了mybatis的缓存设计体系,这里我们来正式看一下这玩意到底是咋个用法。 首先我们是知道的,Mybatis中存在两级缓存。分别是一级缓存(会话级),和二级缓存(全局级)。 下面我们就来看看这两级缓存。 一、准备工作 1、准备数据库 在此之…

HCIP:不同VLAN下实现网络互相通信

配置pc1 配置pc2 配置pc3 将sw1划分到vlan3 将sw3划分到vlan3 在sw1上进行缺省 将sw1上(g0/0/1)的untagged改成 1 3 则在pc1上ping pc2可通 在sw1上进行缺省 在sw3上(e0/0/1)打标记 则在pc1上ping pc3可通(实现互通&am…

阿里云Serverless 容器使用,以及常见问题处理

阿里云Serverless Kubernetes容器服务(ASK)是基于Kubernetes的Serverless容器产品,能够自动完成资源管理、弹性伸缩和按需计费。以下是一些基本使用步骤以及常见问题处理: 阿里云Serverless Kubernetes(ASK&#xff0…

17.鸿蒙HarmonyOS App(JAVA)滑动选择器

每天进步一点点,成功在久不在速 滑动选择器 //设置文本样式 picker.setNormalTextFont(Font.DEFAULT_BOLD); picker.setNormalTextSize(40); picker.setNormalTextColor(new Color(Color.getIntColor("#FFA500"))); picker.setSelectedTextFont(Font.DEFAULT_BOLD)…

socket通信客户端收到16进制转换出现efbfbd乱码解决办法

socket客户端接收服务端发来的数据时,发现老有efbfbd乱码,如下图,服务端发送的是02040200013CF0,但是客户端接收到解析后却不一样 客户端接收解析并打印 在网上查原因后,原因是将接收的byte数组转换为String后&#…

C++:第十三讲BFS广度优先搜索

前言 今天带领大家学一下BFS。 DFS可以看——C:第十二讲DFS深搜(二)_c匿名函数dfs-CSDN博客 BFS简介 广度优先搜索(breadth-first search,缩写为bfs)又名宽度优先搜索,是最简便的图的搜索算法之一&…

Conda python运行的包和环境管理 入门

Conda系列: 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装 Conda 是一个功能强大的命令行工具,用于在 Windows、macOS 和 Linux 上运行的包和环境管理。 本 conda 入门指南介绍了启动和使用 conda 创建环境和安装包的基础知识。 1. 准备…