【shell】条件语句

news2024/10/6 8:36:31

一、测试

1.1文件测试test

test命令是内部命令

test的语法
test 条件表达式
[ 条件表达式 ] 

test 选项 文件
-d :判断是否是目录
-f :判断是否是普通文件
-b :判断是否是块设备
-c :判断是否是字符设备
-e :判断是否存在  ##建议不使用
-e :判断是否存在  ##好用,建议使用
-r :判断是否有读的权限  ##好用
-w :判断是否有写的权限  ##好用
-x :判断是否有执行的权限  ##好用

test的用法  

中括号的用法 

 注意-e和-a的区别,在于取反,建议使用-e即可

总结:test主要用于判断文件是否存在,[]也有这样的用处,所以常还是使用[],test不常用 

1.2整数值比较[]

整数的比较判断使用英文:
-eq :表示等于
-ne :表示不等于
-gt :表示大于
-ge :表示大于等于
-lt :表示小于
-le :表示小于等于

案例一:判断boot分区的使用率是否够用 

案例二:比较两个变量的大小

 

1.3字符串比较

= : 表示字符串相同
!= :表示字符串内容不相同
-z :表示字符串内容为空
-n :表示字符串存在
语法格式:
[ 字符串1 = 字符串2 ] ##判断两个字符串是否相同
[ 字符串1 != 字符串2 ] ##判断两个字符串是否不相同
[ -z 字符串 ] ##判断字符串是否为空或是否存在,(存在且空也为不存在)

案例一:判断变量是否有值 

案例二:借助环境变量,判断用户是否存在 

1.4逻辑测试(短路运算)

短路运算
与:&&(相当于电路串联)
格式1:[判断1] && [判断2] 
格式2:命令1 && 命令2 
##表示需要命令1和命令2都为真,才为真,真的意思是$?为0

##执行逻辑:如果命令1为真,继续执行命令2,如果命令1为假,没必要执行命令2


或:|| (相当于电路并联)
格式1:[判断1] || [判断2] 
格式2:命令1 || 命令2 
##表示需要命令1和命令2其中一个为真,就为真,真的意思是$?为0

##执行逻辑:如果命令1为真,没必要执行命令2;如果命令1为假,执行命令2

合并用法:只需要记住一个

命令1 && 命令2 ||命令3:特殊用法,表示判断命令1执行结果,正确执行命令2,错误执行命令3

#!/bin/bash
read -p "请输入想测试的ip地址:" ip
ping -c 3 -W2 $ip &>/dev/null && echo "$ip is online" || echo "$ip is offline"

-a或&&:逻辑与,表示而且的意思,全真为真

-o或||:逻辑或,表示或,一真为真

!:逻辑否

在条件表达式中是可以相互转换的,但是命令序列,不能变换

格式1:[判断1] && [判断2] (可以)
格式2:命令1 && 命令2 (不可以)

下面哪些语法是错误的:
[root@localhost opt]#[ $a -ne 12 ]&& [ $a -gt 5 ];echo $?
[root@localhost opt]#[ $a -ne 12 -a $a -gt 5 ];echo $?
[root@localhost opt]#[[ $a -ne 12 && $a -gt 5 ]];echo $?
[root@localhost opt]#[ $a -ne 12 && $a -gt 5 ];echo $?  ##错误,需要双中括号
[root@localhost opt]#[ $a -ne 12 ] -a [ $a -gt 5 ];echo $?  ##错误,不能这样使用

产生随机数,测试运气

1.5双中括号(支持正则表达式和通配符)

[[ expression ]] 用法
== 左侧字符串是否和右侧的PATTERN相同
 注意:此表达式用于[[ ]]中,PATTERN为通配符

=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
 注意: 此表达式用于[[  ]]中;扩展的正则表达式

总结:注意使用的语法,可以理解为双中括号可以支持模糊匹配 

[root@localhost opt]#script=ping.sh

[root@localhost opt]#[[ $script == *.sh ]];echo $?(可以)
[root@localhost opt]#[[ $script =~ sh$ ]];echo $?(可以)

1.6小括号和花括号的区别

总结:

小括号类似于bash,在子bash中运行,不影响当前bash环境变量;

花括号类似于source,在当前的bash环境运行,会影响当前bash的环境变量的值;且需要以分号结尾

二、if语句的结构

if条件语句的结构类型

2.1单分支结构

if [ 判断 ]
then
命令序列
fi

2.2双分支结构

if [ 判断 ]
then
命令序列1
else
命令序列2
fi

2.3多分支结构

if [ 判断1 ]
then
命令序列1
elif [ 判断2 ]
then
命令序列2
elif [ 判断3 ]
then
命令序列3
.....(可以有多个)
else
命令序列4
fi

实操1:判断是否为超级管理员

实操2:根据分数反馈表现结果

 实操3:根据判断添加用户

  实操4:剪刀石头步小游戏

 实操5:判断几点,进行问好

 

三、case语句的结构

case的语法结构

case 变量 in 
条件1)
命令序列1
;;
条件2)
命令序列2
;;
.....(可以添加多个条件)
esac  ##这就是case的反过来的字母

 

 

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

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

相关文章

阿里 OSS鉴权访问文件

如果OSS文件设置保护,需要鉴权才能访问,添加请求头鉴权,SDK方法如上; 将鉴权信息和地址、时间返回给前端,前端直接从oss上读取 String filePath "/admin/2023/6/183569314928918546.png"; RequestMessage…

MindSpore基础教程:使用 MindCV和 Gradio 创建一个图像分类应用

MindSpore基础教程:使用 MindCV和 Gradio 创建一个图像分类应用 官方文档教程使用已经弃用的MindVision模块,本文是对官方文档的更新 在这篇博客中,我们将探索如何使用 MindSpore 框架和 Gradio 库来创建一个基于深度学习的图像分类应用。我…

场景中的解剖学方向标记_vtkAnnotatedCubeActor

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题:显示标记当前视角、空间的方位,关键对象vtkAnnotatedCubeActor: vtkAnnotatedCubeActor 是一个混合3D 演员&#xf…

Python如何实现模板方法设计模式?什么是模板方法设计模式?Python 模板方法设计模式示例代码

什么是模板方法(Template Method)设计模式? 模板方法(Template Method)是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。这种模式允许子类为一个算法的特定步骤提供…

远程桌面访问MATLAB 2018B,提示License Manger Error -103,终极解决方案

通过远程桌面方位Windows Server系统下的MATLAB2018B,报错License Manger Error -103,Crack文件夹下的dll文件已经替换,同时也已经输出了lic文件,但是仍然无法打开。但是在本地桌面安装就没有问题。初步怀疑MATLAB的License使用机…

Java实现象棋算法

象棋算法包括搜索算法、评估函数和剪枝算法。以下是一个简单的实现: 搜索算法:使用极大极小值算法,即每个玩家都会做出最好的选择,考虑到对方也会做出最好的选择,所以需要搜索多层。 public int search(int depth, i…

UE5 操作WebSocket

插件:https://www.unrealengine.com/marketplace/zh-CN/product/websocket-client 参考:http://dascad.net/html/websocket/bp_index.html 1. 安装Plugings 2.测试websocket服务器 http://www.websocket-test.com/ 3.连接服务器 如果在Level BP里使用&a…

武汉站--ChatGPT/GPT4科研技术应用与AI绘图及论文高效写作

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

传输层协议 - TCP(Transmission Control Protocol)

文章目录: TCP 协议关于可靠性TCP 协议段格式序号与确认序号六个标志位16位窗口大小 确认应答(ACK)机制超时重传机制连接管理机制连接建立(三次握手)连接终止(四次挥手)TIME_WAIT 状态CLOSE_WAI…

5.2 Windows驱动开发:内核取KERNEL模块基址

模块是程序加载时被动态装载的,模块在装载后其存在于内存中同样存在一个内存基址,当我们需要操作这个模块时,通常第一步就是要得到该模块的内存基址,模块分为用户模块和内核模块,这里的用户模块指的是应用层进程运行后…

经典双指针算法试题(一)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、移动零1、题目讲解2、讲解算法原理3、代码实现 二、复写零1、题目讲解2、讲解算法原理3、…

Spring-IOC-@Import的用法

1、Car.java package com.atguigu.ioc; import lombok.Data; Data public class Car {private String cname; }2、 MySpringConfiguration2.java package com.atguigu.ioc; import org.springframework.context.annotation.Bean; import org.springframework.context.annotatio…

VBA技术资料MF85:将工作簿批量另存为PDF文件

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—同济大学专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室,浓厚创新产学研氛围! 教授亲临现场,面对面答疑解惑助攻申请! 一经录取,享全额奖学金1.5万/月! 🕙时间:…

mac 和 windows 相互传输文件【共享文件夹】

文章目录 前言创建共享文件夹mac 连接共享文件夹 前言 温馨提示:mac 电脑和 windows 电脑必须处于同一局域网下 本文根据创建共享文件夹的方式实现文件互相传输,所以两台电脑必须处于同一网络 windows 创建共享文件夹,mac 电脑通过 windows…

Mrakdown Nice:格式

标题 缩进 删除线 斜体 加粗

EANet:用于医学图像分割的迭代边缘注意力网络

EANet: Iterative edge attention network for medical image segmentation EANet:用于医学图像分割的迭代边缘注意力网络背景贡献实验方法Dynamic scale-aware context module(动态规模感知上下文模块)Edge attention preservation module&a…

【日常总结】Swagger-ui 导入 showdoc (优雅升级Swagger 2 升至 3.0)

一、场景 环境: 二、存在问题 三、解决方案 四、实战 - Swagger 2 升至 3.0 (Open API 3.0) Stage 1:引入Maven依赖 Stage 2:Swagger 配置类 Stage 3:访问 Swagger 3.0 Stage 4:获取 js…

pycharm 控制台中文乱码处理

今天使用pycharm,发现控制台输出又中文乱码了,看网上很多资料说把编码改为UTF-8,设置为并未生效,特此在此记录下本地设置。 1. 修改文件编码:Setting -> Editor ->File Encodings,修改配置如下: 2. …

Windows10环境下Python解析pacp文件

Windows10环境下Python解析pacp文件 一、背景 在Python中,你可以使用scapy库来解析pcap文件。scapy是一个功能强大的网络分析工具,可以用于解析、构建和发送网络数据包。 二、环境安装 命令在终端中安装: pip install scapy由于我使用的Pycharm,所以我就直接在Python Int…