【Shell】各种条件语句的使用——test语句、if语句、case语句

Shell条件语句的使用

条件语句

  • Shell条件语句的使用
    • 条件测试的语法
      • 字符串测试表达式
      • 整数二元比较操作符
      • 逻辑操作符
    • if的条件语句的语法
      • if的嵌套
      • case语句语法


条件测试的语法

语法1:test <测试表达式>
利用test命令进行条件测试表达式的方法。test命令与<测试表达式>之间至少有一个空格。

语法2:[ <测试表达式> ]
通过[](单中括号)进行条件测试表达式的方法,和test命令用法相同。[]的边界和内容之间至少有一个空格。

语法3:[[ <测试表达式> ]]
通过[[]](双中括号)进行条件测试表达式的方法,比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。

语法4:((<测试表达式>))
通过(())(双小括号)进行条件测试表达式的方法,一般用于if语句。(())(双小括号)两端不需要有空格。

test条件测试的简单语法及示例

test条件测试的语法格式为:test<测试表达式> 对于如下语句: test -f file && echo true || echo false

该语句表示如果file文件存在,则输出true,否则(||)输出false。这里的&&是并且的意思。test的-f参数用于测试文件是否为普通文件,test命令若执行成功(为真),则执行&&后面的命令,而||后面的命令是test命令执行失败之后(为假)所执行的命令。 test命令测试表达式的逻辑也可以用上述表达形式的一半逻辑(即仅有一个&&或||)来测试,示例如下。

test -f /tmp/test.txt && echo 1 #<==若表达式成功,则输出1。
test -f /tmp/test.txt || echo 0 #<==若表达式不成功,则输出0。

[](中括号)条件测试语法及示例
[]条件测试的语法格式为:[ <测试表达式> ],注意[]两边有空格

-f /tmp/ywx.txt ] && echo 1 || echo 0

如果/tmp/ywx.txt文件存在,则输出1,否则(||)输出0。这里的&&表示并且。[]的应用同test命令,若中括号里的命令执行成功(返回真),则执行&&后面的命令,否则执行||后面的命令。 []测试表达式的逻辑也可以用如下的语法来判断逻辑的表达式写法(test命令的用法也适合于此),即: [ -f /tmp/ywx.txt ] && echo 1 #<==若表达式成功,则输出1。 [ -f /tmp/ywx.txt ] || echo 0 #<==若表达式不成功,则输出0

-d(directory)目录
文件存在且为目录则位真,及测试表达式成立

-f(file)文件
文件存在且为普通文件则位真,及测试表达式成立

-e(exist)
文件存在则为真,及测试表达式成立。不区分文件或目录。

-r(read)文件
文件存在且有可读权限则为真,及测试表达式成立

-s(size)文件
文件存在且文件小大不为0则为真,及测试表达式成立

-w(write)文件
文件存在且有可写权限则为真,及测试表达式成立

-x(executable)文件
文件存在且有可执行权限则为真,及测试表达式成立

-L(link)文件
文件存在且为链接文件则为真,及测试表达式成立

f1 -nt f2, nt(newer than)
文件f1比文件f2新则为真,及测试表达式成立。根据文件的修改时间来计算

f1 -ot f2, ot(older than)
文件f1比文件f2旧则为真,及测试表达式成立。根据文件的修改时间来计算

字符串测试表达式

字符串测试表达式
字符串测试操作符的作用包括:比较两个字符串是否相同、测试字符串的长度是否为零、字符串是否为NULL等

-n "字符串"
若字符串长度不为0,则为真,及测试表达式成立,n(no zero)

-z "字符串"
若字符串长度为0,则为真,及测试表达式成立,z(zero)

"字符串1" = "字符串2"
若字符串1等于字符串2,则为真,及测试表达式成立,也可以使用"=="

"字符串1" != "字符串2"
若字符串1不等于字符串2,则为真,及测试表达式成立,不能使用!==

·对于字符串的测试,一定要将字符串加双引号之后再进行比较。如[ -n "$myvar" ],特别是使用[]的场景。
·比较符号(例如=和!=)的两端一定要有空格。
·“!=”和“=”可用于比较两个字符串是否相同。

整数二元比较操作符

在[]和test中使用的比较符

-eq:相等
-ne: 不等于
-gt: 大于
-ge: 大于等于
-lt: 小于
-le:小于等于

在(())和[[]]中使用的比较符号·

====
>
>=
<
<=

1)·“=”和“!=”也可在[]中做比较使用,但在[]中使用包含“>”和“<”的符号时,需要用反斜线转义,有时不转义虽然语法不会报错,但是结果可能会不对。
2)·也可以在[[]]中使用包含“-gt”和“-lt”的符号,但是不建议这样使用。
3)·比较符号两端也要有空格。

逻辑操作符

1、逻辑操作符
在[]和test中使用

-a and,与,两端都为真,则结果为真
-o or,或,两端有一个为真,则结果为真
!  not,非,两端取反,则结果为真

在[[]]和(())中使用

&& and,与,两端都为真,则结果为真
|| or,或,两端有一个为真,则结果为真
!   not,非,两端取反,则结果为真

测试表达式test、[]、[[]]、(())的区别总结
在这里插入图片描述

if的条件语句的语法

1、基本语法:

if [ command ]; then
     符合该条件执行的语句
fi

2、扩展语法

if [ command ];then
     符合该条件执行的语句
elif [ command ];then
     符合该条件执行的语句
else
     符合该条件执行的语句
fi

if的嵌套

格式一:

  if [ condition ]
  then 
        if [ condition ]
        then 
            commands1
        else
            commands2
         fi    
   fi

格式二:

if [ condition ]
then 
    if [ condition ]
    then 
         commands1
    else    
         commands2
    fi
else
    commands3
fi

case语句语法

case 变量名 in
  值1) 
   指令1 
  ;; 
  值2) 
   指令2 
  ;; 
  值3) 
   指令3 
  ;; 
   *)
    默认
esac

case语句会将该变量的值与每个值相比较,如果与某个值相等,则执行该value所对应的一组语句。当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。如果没有任何一个值与variable的值相匹配,则执行*后面的一组语句。


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

外包干了25天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

深入浅出 -- 系统架构之微服务标准组件及职责

我们来认识一下微服务架构在Java体系中依托哪些组件实现的。 相对于单体架构的简单粗暴&#xff0c;微服务的核心是将应用打散&#xff0c;形成多个独立提供的微服务&#xff0c;虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题&#xff1a; 1…

从“危”到“机”:HubSpot如何助企业转化出海营销CRM风险?

在全球化的大背景下&#xff0c;越来越多的企业选择出海拓展业务&#xff0c;以寻求更大的发展空间。然而&#xff0c;随着市场的扩大&#xff0c;企业在出海营销过程中也面临着各种风险。为了有效规避这些风险&#xff0c;许多企业选择借助HubSpot这样的专业营销软件。今天运营…

软文写作技巧,媒介盒子揭秘

数字化时代,想要获取用户的注意力难上加难&#xff0c;只有紧跟互联网的创作节奏&#xff0c;在软文写作中,根据用户的浏览偏好进行适当调整,让软文具有更高的审美性、易读性和启示性,才能有效地吸引当下受众的注意力。今天媒介盒子就来和大家聊聊软文写作技巧。 一、文章选题 …

C语言之自定义类型联合和枚举

目录 前言 一&#xff1a;联合体&#xff08;共用体&#xff09;union 1.联合体类型的声明 2.联合体的特点 3.联合体大小的计算 4.联合体判断机器的大小端 二&#xff1a;枚举enum 1.概念 2.枚举的优点 3.枚举的使用 接下来的日子会顺顺利利&#xff0c;万事胜意…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…

2014最新AIGC创作系统ChatGPT网站源码+AI绘画网站源码+GPT4-All联网搜索模型

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

【超简单】基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…

电脑网卡无法连接网络?三招教你解决问题

在现代生活中&#xff0c;电脑网卡扮演着连接互联网的关键角色。无论是有线网卡还是无线网卡&#xff0c;都是电脑与外部网络通信的重要途径。然而&#xff0c;有时候我们可能会遇到电脑网卡无法连接网络的问题&#xff0c;这会严重影响我们的工作和娱乐。本文将介绍三种常见的…

【Qt】文件与音视频

目录 一、输入输出设备类 二、文件读写类 三、文件和目录信息类 四、音视频 4.1 音频 4.2 视频 文件操作是应用程序必不可少的部分。Qt作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作…

用Python实现输入点云索引绘制该点云法向量

import open3d as o3d# 读取pcd文件 pcd o3d.io.read_point_cloud(r"D:\PythonProjects\Codes\paper_images\back_point\voxel.pcd")# 计算法向量 pcd.estimate_normals(search_paramo3d.geometry.KDTreeSearchParamHybrid(radius0.1, max_nn30))# 选择要绘制法向量…

四级作文模板——议论文——现象解释

议论文类型 现象解释 第一句 with the rapid development of society / economy / education / technology / culture / medical / service(任选) , it is of great necessity for youngster / students to improve our speaking ability.随着社会/经济/教育/科技/文化/医疗…

腾讯、阿里、字节….等大厂都更喜欢什么样的简历?

我985毕业&#xff0c;为什么筛选简历时输给了一个普通一本&#xff1f; 我投了20份简历&#xff0c;为什么没有一个大厂回我&#xff1f; 每次HR收到简历就没下文了&#xff0c;是我的简历有问题吗&#xff1f; 诚然&#xff0c;在求职时&#xff0c;简历往往就是我们给予H…

AI爆款文案 巧用AI大模型让文案变现插上翅膀

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

【C++】 详解 lower_bound 和 upper_bound 函数(看不懂来捶我!!!)

目录 一、前言 二、函数详解 &#x1f95d; lower_bound &#x1f34d;upper_bound 三、常考面试题 四、共勉 一、前言 这两个函数是我在 LeetCode 上做题见到&#xff0c;看到不熟悉的函数 lower_bound 和 upper_bound让我感觉很难受&#xff0c;于是在 C 官网去学习&…

Java入门基础知识第七课(超基础,超详细)——数组

前面二白讲了选择结构和循环结构&#xff0c;动手的同学会发现已经有了一定的难度&#xff0c;后面二白会专门收集一些经典的题目&#xff0c;训练多了才能让记忆更加深刻&#xff0c;这次咱们讲一下数组。 一、数组的定义 什么是数组呢&#xff0c;我们都知道变量是存储数据的…

数字乡村发展:推动农村现代化进程

随着信息技术的迅猛发展和数字化浪潮的深入推进&#xff0c;数字乡村发展已成为推动农村现代化进程的重要力量。数字乡村不仅是乡村振兴战略的重要组成部分&#xff0c;也是实现农村经济社会全面发展的重要途径。本文将从数字乡村的内涵、发展现状、面临的挑战以及发展策略等方…

聚类算法的先验基础知识

聚类算法的先验基础知识 1. 瑞利商2. 谱定理3. 联合概率4. 条件概率分布5. 边缘分布6. 贝叶斯定理7. 有向图8. 拉格朗日乘子定理 下一篇将介绍整理各种聚类算法&#xff0c;包括k-means&#xff0c;GMM(Guassian Mixture Models, 高斯混合)&#xff0c;EM(Expectation Maximiza…

Docker速成:新手变专家!

Docker介绍 容器历史 1、Chroot Jail 就是常见的chroot命令的用法。它在1979年的时候就出现了&#xff0c;被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。 2、The FreeBSD Jail &#xff08;监狱&#xff09;实现了操作系统级别的虚拟化&#xff0c;他…