Shell 脚本编程(二) —— 条件判断 (test命令) + 多路分支语句(if 、case)

news2024/11/25 2:54:27

test 命令可以用于判断文件类型以及值的比较,test 判断条件为真,返回 0;条件为假,返回 1。


        目录

一、条件判断

(1) 整数判断

(2) 字符串判断

(3) 文件判断

二、if 语句

1、语法结构

2、实际运用

三、case语句


一、条件判断

(1) 整数判断

整数判断用到的运算符如下:

运算符含义
-eq等于(equal)
-gt大于(greater than)
-lt小于(less than)
-ge大于等于(greater equal)
-le小于等于(less equal)
-ne不等于(not equal)
# 如果一行有多个命令,命令行通过 ‘;’ 来判断一个命令是否结束
# $? 表示上一条命令的执行结果命令行使用 ; 来分隔不同的命令

# test 1 -eq 1 的执行结果为真,返回 0,因此 $? 拿到的值就是 0
[gzx@VM-16-2-centos ~]$ test 1 -eq 1;echo $?        
0
[gzx@VM-16-2-centos ~]$ test 1 -eq -1;echo $?
1
[gzx@VM-16-2-centos ~]$ test 1 -gt -1;echo $?
0

(2) 字符串判断

字符串判断用到的运算符如下:

运算符含义
==等于
!=不等于
-n检查字符串长度是否大于0
-z检查字符串长度是否等于0
#注意:字符串和运算符之间必须要有空格隔开
[gzx@VM-16-2-centos ~]$ test $USER == 'root';echo $?
0
[gzx@VM-16-2-centos ~]$ test $USER == 'roat';echo $?
1

(3) 文件判断

test命令除了可以做值的比较外,还可以检测文件类型

选项含义
-d name    测试name 是否为一个目录
-e name    测试一个文件是否存在
-f name测试name 是否为普通文件
-L name    测试name 是否为符号链接
-r name    测试name 文件是否存在且为可读
-w name    测试name 文件是否存在且为可写
-x name    测试name 文件是否存在且为可执行
-s name    测试name 文件是否存在且其长度不为0
f1 -nt f2  测试文件f1 是否比文件f2 更新
f1 -ot f2  测试文件f1 是否比文件f2 更旧
[gzx@VM-16-2-centos ~]$ test -f file.txt;echo $?
0
[gzx@VM-16-2-centos ~]$ test -d file.txt ;echo $?
1

二、if 语句

1、语法结构

if    表达式1
  then  执行语句1
else  执行语句2
fi

2、实际运用

可以使用方括号代替 test 命令,但是首尾至少要有一个空格

# 命令行输入
[gzx@VM-16-2-centos ~]$ ./variable.sh file.txt


################# 写法一 #################
# variable.sh
if test -d $1
    then  echo "File $1 exists"  
else
    echo "File $1 not exists" 
fi
################# 写法二 #################
if [ -d $1 ] 
    then  echo "File $1 exists"  
else
    echo "File $1 not exists" 
fi

 

三、case语句

case 字符串变量 in
    模式1)
            执行语句1
            ;;
    模式2)
            执行语句2
            ;;            #双分号结束(类似于C的break)
    *)                    # * 表示其他模式(类似于C的default)
            执行语句3
            ;;    
esac

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

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

相关文章

【毕业设计】图像识别跌倒检测算法研究与实现 - python 深度学习 机器学习

文章目录0 前言1 简介2 实现方法2.1 传统机器视觉算法2.2 基于机器学习的跌倒检测2.2.1 SVM简介2.2.2 SVM跌倒检测原理2.2.3 算法流程2.2.4 算法效果2.3 深度学习跌倒检测2.3.1 最终效果2.3.2 网络原理3 最后0 前言 🔥 Hi,大家好,这里是丹成…

Java集合框架【二容器(Collection)[ArrayList]】

文章目录1 容器/集合简介2 容器的结构2.1 结构图2.1.1 单例集合2.1.2 双例集合3 单例集合的使用3.1 Collection接口的介绍3.2 Collection接口中的接口方法3.3 List接口3.3.1 List接口特点3.3.2List的常用方法3.4 ArrayList容器类3.4.1 添加元素3.4.2 获取元素3.4.3 根据索引删除…

水尺监测识别系统

水尺监测识别系统利用计算机视觉机器学习技术对河道湖泊进行实时检测,当水尺监测识别系统监测到河道水位异常时,立即告警。水尺监测识别系统同时将告警截图和视频保存下来,推送给后台。水尺监测识别系统极大提升现场区域的管控效率&#xff0…

android EventBus

EventBus使用小案例 文件目录结构 MainActivity.java package com.example.myeventbus;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import andro…

两万字长文带你深入Go语言GC源码

介绍 三色标记法 三色标记法将对象的颜色分为了黑、灰、白,三种颜色。 黑色:该对象已经被标记过了,且该对象下的属性也全部都被标记过了(程序所需要的对象);灰色:该对象已经被标记过了&#…

一段JS去除畅言免费版广告

畅言广告怎么去掉?去除畅言免费版广告方法是什么?现在很多站长都使用的社会化评论系统,可以让网站拥有免费的评论区,活化你的网站,但是随着很多社会化评论提供网站的关闭,畅言一家独大,现在免费…

企业网络自动化配置

更新的技术、合规性标准和不断变化的业务需求使管理当今的网络成为一项具有挑战性的任务。这解释了网络自动化在当今世界的重要性。IT 管理员现在的任务是确保网络的敏捷性和演进不会影响提供给最终用户的网络服务的稳定性、可用性和可靠性。但是,在此任务中&#x…

【JMX】JMX远程监控JVM参数配置

目录基本用法命令示例jconsole连接新建连接确认连接方式查看监控信息jvisualvm连接添加主机增加JMX连接查看监控信息参数说明基本参数jmxremote.access文件说明jmxremote.password文件说明文件权限异常无法验证基本用法 命令示例 #参考命令 java -Dcom.sun.management.jmxrem…

【Java学习】语法:包、权限修饰符、final、常量、枚举、抽象类、接口

文章目录一、包二、权限修饰符三、final四、常量五、枚举六、抽象类七、接口一、包 什么是包? 包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。建包的语法格式: package公司域名倒写.技术名称。报名建议全部英文小写,且…

WebRTC系列<二> 案例与工具

阅读关于webRTC的其他文章: WebRTC系列<一> 什么是WebRTC? WebRTC系列<二> 案例与工具 ---------------------------------案例--------------------------------- webrtc官网 : 官网示例代码github地址…

【Raspberry Pi】搭建NAS流媒体播放器 + ARIA2 + YAAW + 迅雷下载系统

由于种(gu)种(ji)原(cuo)因(wu)新买的Pi并没有用于任何项目上,看着它一天一天的封尘,于心不忍终于让它也做了点事。恰好这几天家里网络晚上有点卡&#xff0c…

数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)

文章目录3. 时序电路的设计3.1 触发器3.1.1 最简单的D触发器3.1.2 带复位端的D触发器3.1.3 复杂功能的D触发器(没有太大必要)3.1.4 T触发器3.2 计数器3.2.1 二进制计数器3.2.2 (重要)任意进制计数器3.3 移位寄存器3.4 序列信号发生…

docker命令整理

第一次安装 查看docker是否安装成功 docker version 测试hello-world docker run hello-world –help 帮助 查看详细信息 docker info 搜索docker镜像网址:https://hub.docker.com/search 查看 查看cpu实时内存 docker stats 镜像关键字:images -…

MySQL-Redis进阶生成全局唯一ID

单体全局ID 场景一、随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, …

阿里最新财报:中国商业分部收入下滑1%,年内股价累计下跌34%

11月17日,阿里巴巴集团(下称“阿里巴巴”,HK:09988、NYSE:BABA)公布2023财年第二季度(对应自然年2022年第三季度)业绩。财报显示,阿里巴巴2022年第三季度的收入为人民币2071.76亿元(…

[附源码]java毕业设计流浪动物领养系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

计算机中的加法器和比较器

本节展示了计算机中的加法器和比较器的底层实现电路设计。 加法器 计算机中加法器的实现依赖门的结构,如果是两个十进制进行加减,则首先把右边的两个0-9之间的数相加,它们的总和在0-18之间,如果答案是0-9之间,则直接写…

Vue--》详解vue组件及其组件化的使用

目录 Vue组件 非单文件组件 单文件组件 组件的组成部分 组件中定义methods方法 vue-cli中组件的使用步骤 vue-cli中注册全局组件 组件的props属性 props中的常用属性 组件间的样式冲突 Vue组件 vue是一个支持组件化开发的前端框架。什么是组件化开发?组件…

那些年我们遇到过的奇葩面试官

做了几年软件开发,我们都或多或少面试过别人,或者被别人面试过。大家最常吐槽的就是面试造火箭,进厂拧螺丝。今天就来吐槽一下那些奇葩(gou)一样的面试官 A 那是在我刚工作1年的时候,出去面试前端开发。 那…

虚拟筛选、高通量实验筛选化合物库

Kynurenine Pathway Library (含12,300种化合物) 靶向犬尿氨酸代谢途径关键酶的新型化合物库 KynureninePathway (犬尿氨酸途径, KP)是色氨酸代谢的主要途径,参与多个病理、生理过程。研究发现阿尔茨海默病、帕金森氏症等多种神经退行性疾病中的 KP 代谢产物水平…