【Shell编程】条件判断

2023-10-27

系列文章

【Shell编程】Shell中的正则表达式
【Shell编程】字符截取命令cut、printf命令
【Shell编程】字符截取命令awk、sed命令


按照文件类型进行判断

测试选项 作用
-b 文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)
-c 文件 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)
-d 文件 判断该文件是否存在,并且是否为目录文件(是目录为真)
-e 文件 判断该文件或者文件夹是否存在,(存在为真)
-f 文件 判断该文件是否存在,并且是否为普通文件(是普通文件)
-L 文件 判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真)
-p 文件 判断该文件是否存在,并且是否为管道文件(是管道文件为真)
-s 文件 判断该文件是否存在,并且是否为非空(非空为真)
-S 文件 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真)

命令test [-文件]

通过echo $?判断上一条命令执行是否成功 0-成功 1-不成功

实例

测试上一条命令是否执行成功

asdfasdf文件是不存在的,所以会执行失败。
在这里插入图片描述

编写一个shell脚本来判断文件是否存在

注意:[ ]俩边必须流一个空格
实现代码如下

#!/bin/bash

if [ -e ./temp ]
then
    echo "aa"
else
    echo "不存在"
fi

通过cat命令查看
在这里插入图片描述
执行脚本:
在这里插入图片描述

按照文件权限进行判断

测试选项 作用
-r 文件 判断该文件是否存在,并且该文件是否拥有读权限(有读权限为真)
-w 文件 判断该文件是否存在,并且该文件是否拥有写权限(有写权限为真)
-x 文件 判断该文件是否存在,并且该文件是否拥有执行权限(有执行权限为真)
-u 文件 判断该文件是否存在,并且该文件是否拥有SUID权限(有SUID权限为真)
-g 文件 判断该文件是否存在,并且该文件是否拥有SGID权限(有SGID权限为真)
-k 文件 判断该文件是否存在,并且该文件是否拥有SBit权限(有SBit权限为真)

实例

测试文件是否存在输出yes no

命令:[ -w /root/test/student.txt ] && echo yes || echo no
只要有w权限就返回yes ,不管是谁有w权限
在这里插入图片描述

俩个文件之间进行比较

测试选项 作用
文件1 -nt 文件2 判断文件1的修改时间是否比文件2的新(新返回真)
文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧(旧则返回真)
文件1 -ef 文件2 判断文件1是否和文件2的Inode号一致,可以理解为俩个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法

实例

测试俩文件是否为硬链接

说明 i节点号一样就是硬链接
在这里插入图片描述

比较是俩文件是否为硬链接
命令: [ student.txt -ef st2 ] && echo yes || echo no
在这里插入图片描述

俩个整数之间比较

测试选项 作用
整数 -eq 整数2 判断俩整数释放相等(相等为真)
整数1 -ne 整数2 不相等为真
整数1 -gt 整数2 整数1 大于 整数2 为真
整数1 -lt 整数2 整数1 小于 整数2 为真
整数1 -ge 整数2 整数1 大于等于 整数2 为真
整数1 -le 整数2 整数1 小于等于 整数2 为真

实例

测试整数比较

命令:[ 23 -gt 22 ] && echo yes || no
在这里插入图片描述

字符串的判断

测试选项 作用
-z 字符串 判断字符串是否为空 (空为真)
-n 字符串 判断字符串是否为非空(非空为真)
字串1==字串2 俩字串相等为真
字串1!=字串2 俩字串不相等为真

实例

测试 字符串是否为空

命令:

name=zhangmeng
[ -z $name  ] && echo yes || no

测试效果
在这里插入图片描述

测试俩变量是否相等

命令:

aa=11
bb=22
[ $aa == $bb ] && echo yes || echo no

测试效果
在这里插入图片描述

多重条件判断

测试选项 作用
判断1 -a 判断2 逻辑与,判断1和判断2都成立,最终的结果才为真
判断1 -o 判断2 逻辑或,判断1和判断2有一个成立,最终结果就为真
!判断 逻辑非,使原始的判断式取反

实例

判断变量是否有值,且是否大于23

命令:

aa=11
[ -n $aa -a $aa -gt 23 ] && echo yes || echo no

测试效果
在这里插入图片描述
命令:

aa=24
[ -n $aa -a $aa -gt 23 ] && echo yes || echo no

测试效果
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Shell编程】条件判断 的相关文章

随机推荐

  • Windows下Anaconda3下载安装详细步骤

    第一步 去官网下载Anaconda Individual Editionhttps www anaconda com products individual 第二步 点击Download 在安装之前 要先安装python的版本 这里我先安装
  • C++ 实验8 继承

    编写一个学生和教师数据输入和显示程序 学生数据有编号 姓名 班级和成绩 教师数据有编号 姓名 职称和部门 要求将编号 姓名输入和显示设计成一个类person 并作为学生类student和教师类teacher的基类 类图如下 代码如下 头文件
  • Win10笔记本(机械革命)亮度调节快捷键失效-已解决

    Win10笔记本 机械革命 亮度调节快捷键失效 已解决 1 确定你已经安装了核心显卡驱动 驱动精灵检查一下 2 右击此电脑 管理 系统工具 设备管理器 监视器 单击展开 卸载dpms 卸载Generic Monitor 选中删除相关驱动 3
  • iText包对每页pdf文件加水印

    https ishare iask sina com cn f 31zwqlKmIwM html
  • 用户编写的python程序、无需修改就可以_python的笔记(一)

    Python的基本特点一种动态解释型的编程语言 规范的代码 Python 采用强制缩进的方式使得代码具有极佳的可读性 高级语言特性 封装内存管理等 可移植性 程序如果避免使用依赖于系统的特性 那么无需修改就可以在任何平台上运行 解释性 直接
  • 带你入门TypeScript

    一 为何学习TS 1 TypeScript 在社区的流行度越来越高 它非常适用于一些大型项目 也非常适用于一些基础库 极大地帮助我们提升了开发效率和体验 2 TypeScript 可以编译出纯净 简洁的 JavaScript 代码 并且可以
  • python画玫瑰图_python windrose(风玫瑰图)

    conda install c https conda anaconda org conda forge windrose b 用pip install windrose可以成功 但是安装的路径 python找不到 from windros
  • 多表联查优化

    多表联查优化我总结有以下几点 优化sql语句 索引优化 反范式设计 业务代码优化 使用缓存 优化sql语句 sql性能分析 查看执行频次 查看执行频次 select insert delete update shwo global sess
  • Python应该怎么学,如何系统地自学Python?

    这是一份kaggle上的银行的数据集 研究该数据集可以预测客户是否认购定期存款y 这里包含20个特征 1 分析框架 2 数据读取 数据清洗 导入相关包 import numpy as np import pandas as pd 读取数据
  • 厉害了,用 Java 也能实现图片识别!

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 源码精品专栏 原创 Java 2020 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 Rock
  • VS2010 编译 sqlite3 生成动态库和链接库

    如果想以dll的方式使用sqlite而新建空的dll工程 添加sqlite源文件 会发现能生成dll 但缺乏lib函数信息映射库 单独使用dll文件是比较麻烦的 而网上多数做法是通过lib exe手动生成lib 这当然不是我想要的 结合几篇
  • 给NVMe设备发送一个SCSI READ_10命令

    0 READ 10命令 READ 6命令只能支持块大小为512B设备的2GB范围的寻址 因此官方推荐将READ 6迁移到READ 10 READ 10具有2TB的寻址能力 对于800G的NVMe设备来说当然是极好的 其实READ 10具有更
  • 【解决】手机安卓已经导入burp证书,但仍提示此证书并非来自被信任的机构

    安卓手机已经安装burpsuite证书 但app应用软件仍无法访问https联网 浏览器可以访问http但https提示此证书并非来自被信任的机构 这问题应该是安卓独有的 博主之前的模拟器访问完全没问题 最近突然无法访问 用控制变量法 我改
  • 2013年11月26日星期二(t3dlib1剩余部分---2)

    接下来 继续进行T3DLIB1剩余部分 倒着进行 先进行bob碰撞检测 int DDraw BOB Collision BOBS BOB PTR bob1 BOB PTR bob2 if bob1 bob2 return 0 int wid
  • 【Unity3D游戏开发学习笔记】(七)上帝之眼—第三人称摄像机的简单实现(跟随视角,自由视角)

    陆陆续续又开始更新自己的博客 看来自我驱动能力还是不够啊 废话不多说了 之前的内容大概说了一下Unity的一些基础知识 接下来我们将要对一些基本功能做一些学习 大家都知道 一个游戏 少不了摄像机的参与 这不是废话么 没摄像机怎么玩 画面都不
  • linux脚本的注释符号是什么,Shell中的变量和符号

    Shell中的变量 变量 shell 变量 可以保存如路径名 文件名或者一个数字 变量名称可以由字母 数字和下划线组成 但是不能以数字开头 如果变量名是 2name 则是错误的 在Bash中 变量的默认类型都是字符串型 如果要进行数值运算
  • log4j2史诗级漏洞攻击重现

    早上来到公司 就听到安全团队的同事说log4j2有个高危漏洞 起初并不是很在意 想着一个日志框架能有啥高危漏洞嘛 但是仔细一看 居然是远程执行命令的漏洞 上次看到这个名字还是struts2 修复方法也很简单 升级log4j依赖版本到2 15
  • vue【element ui】el-date-picker 日期选择器控件 限制可选的开始时间和结束时间

    项目场景 总结一下日期控件实现开始日期 结束日期的选择范围限制 以便更符合实际情况 需求 1 开始时间和结束时间都不能选当前日期之后的时间 当前时间 2022年5月16日 2 先选开始时间的话 结束时间是在开始时间的后一周内选择 也就是不能
  • 实习中了解的互联网数仓

    大数据平台 之前在两家互联网企业都做过数仓相关方面的实习岗位 一家中大厂 一家大厂 在这里简单分享一些数仓在企业中实际的运作 方便一些对数仓有兴趣但尚未在企业中数仓岗位实践过的同学了解 数据开发平台 一般来说 中型或大型企业都会有自己的大数
  • 【Shell编程】条件判断

    系列文章 Shell编程 Shell中的正则表达式 Shell编程 字符截取命令cut printf命令 Shell编程 字符截取命令awk sed命令 目录 系列文章 按照文件类型进行判断 实例 测试上一条命令是否执行成功 编写一个she