【Linux】关系运算符、shell判断脚本执行时是否有传参、判断文件/文件夹是否存在、判断字符串是否相等、判断上个命令执行是否正常、判断字符串是否为空

🦄 个人主页——🎐个人主页 🎐✨🍁

🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!🪁🍁🪁🍁🪁🍁🪁🍁

目录

一、关系运算符(数字比较符)

二、判断脚本执行时是否有传参,或者判断传参个数

2.1 判断脚本执行时是否有传参,或者判断传参个数

2.2 使用$1参数

三、判断文件或文件夹是否存在

3.1 判断文件是否存在

3.2 判断文件夹是否存在

四、判断字符串是否相等

4.1 使用双等号 == 进行比较

4.2 使用 = 进行比较

五、判断上个命令执行是否正常

5.1 判断上个命令执行是否正常

5.2 获取命令的输出

六、判断字符串是否为空


一、关系运算符(数字比较符)


在shell脚本中,我们经常在if语句中看到-ge、le等字样,下面我们看看这都是什么意思

-eq :equal(相等)-ne :not equal(不等)-gt :greater than(大于)-ge :greater than or equal(大于或等于)-lt :less than(小于)-le :less than or equal(小于或等于)

运算符

                                  说明

     举例

        含义

-eq

检测两个数是否相等,相等返回 true。

[ $a -eq $b ] 返回 false。

//equals 等于

-ne

检测两个数是否不相等,不相等返回 true。

[ $a -ne $b ] 返回 true。

//no equals 不等于

-gt

检测左边的数是否大于右边的,如果是,则返回 true。

[ $a -gt $b ] 返回 false。

//greater than 大于

-lt

检测左边的数是否小于右边的,如果是,则返回 true。

[ $a -lt $b ] 返回 true。

//less than 小于

-ge

检测左边的数是否大于等于右边的,如果是,则返回 true。

[ $a -ge $b ] 返回 false。

//greater equals 大于等于

-le

检测左边的数是否小于等于右边的,如果是,则返回 true。

[ $a -le $b ] 返回 true。

//less equals 小于等于

注意:
1、在shell中进行比较时,结果为0代表真,为1代表假。
2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。


# 统计文件行数
rowNum=$(cat /var/log/cron | wc -l)
if [ $rowNum -ge 1 ] && [ $rowNum -le 100 ]; thenecho "1 - 100"
else echo "大于100"
fi

执行结果:


二、判断脚本执行时是否有传参,或者判断传参个数


2.1 判断脚本执行时是否有传参,或者判断传参个数

在 Shell 脚本中,要判断参数个数,可以使用特殊变量 $# 来获取传递给脚本或函数的参数个数。

if [ $# -eq 0 ]; thenecho "没有参数."
elseecho "参数个数: $#"
fi

在上述示例中,通过检查 $# 变量的值来判断是否有传递给脚本或函数的参数。

2.2 使用$1参数

在shell中$1变量表示脚本的第一个参数。所以如果判断$1参数是空值,即可表示脚本没有参数

if [ "$1" ];thenecho "带参数";
elseecho "没有带参数 "
fi

执行结果:


三、判断文件或文件夹是否存在


3.1 判断文件是否存在

if [ -f "/var/log/messages" ]; thenecho "文件存在."
elseecho "文件不存在"
fi

上述示例中,将/var/log/messages 替换为要检查的实际文件路径。-f 参数用于检查路径是否为一个普通文件。

如下将判断改为"[[xxx]]"

if [[ -f "/path/to/file" ]]; thenecho "File exists."
elseecho "File does not exist."
fi

与方括号 [] 不同,[[ 提供了更多的功能和灵活性,并且在条件测试中更加常用。

test 命令也可以直接用于条件判断。

if test -e "/var/log/messages"
thenecho "文件存在."
elseecho "文件不存在"
fi

执行结果:

注意:上述实例中的路径是测试路径,需要将其替换为要检查的实际文件路径。

3.2 判断文件夹是否存在

如果要判断是否存在的是一个目录而不是一个文件,可以将 -f 参数替换为 -d 参数。

if [ -d "/path/to/directory" ]; thenecho "Directory exists."
elseecho "Directory does not exist."
fi

在上述示例中,将 /path/to/directory 替换为您要检查的相对路径下的文件夹路径。-d 参数用于检查路径是否为一个目录

使用 test

if test -d "/path/to/directory"; thenecho "Directory exists."
elseecho "Directory does not exist."
fi

 执行结果:


四、判断字符串是否相等


4.1 使用双等号 == 进行比较

str1="hello"
str2="hello"if [ "$str1" == "$str2" ]; thenecho "Strings are equal."
elseecho "Strings are not equal."
fi

注意,在双等号 == 前后的字符串变量周围需要使用双引号引起来,以防止字符串中包含空格或特殊字符时出错。

4.2 使用 = 进行比较

str1="hello"
str2="world"
str3="world"
str4="world"if [ "$str1" = "$str2" ] && [ "$str3" = "$str4" ]; thenecho "Strings are equal."
elseecho "Strings are not equal."
fi

执行结果:


五、判断上个命令执行是否正常


5.1 判断上个命令执行是否正常

在 Shell 脚本中,可以使用特殊变量 $? 来判断上一个命令是否执行正常。该变量保存了上一个命令的退出状态码。

通常情况下,命令执行成功时会返回退出状态码 0,而执行失败时会返回非零的退出状态码。

# 正确的 命令
java -version
echo $?
if [ $? -eq 0 ]; thenecho "Command executed successfully."
elseecho "Command failed to execute."
fi

在上述示例中,首先执行了 "java -verison" 命令。通过检查 $? 变量的值来判断是否成功执行。

注意$? 变量的值仅表示上一个命令的退出状态码,而不是具体的错误信息。如下错误“java -version”

5.2 获取命令的输出

在 Shell 脚本中,可以获取命令的输出,使用反引号 (``) 或 $() 运算符:

file=/var/log/cron
num=$(cat ${file} | wc -l)
echo "$num"num=`cat ${file} | wc -l`
echo "$num"

执行结果:

在上述示例中,获取文件文件行数并输出,使用了管道符号 “|”,我们可以拼接更多的命令。


六、判断字符串是否为空


在 Shell 脚本中,要判断字符串是否为空,可以使用以下方法:

使用 -z 参数

str="hello"if [ -z "$str" ]; thenecho "String is empty."
elseecho "String is not empty."
fi

在上述示例中,我们定义str为hello。然后,使用 -z 参数来检查字符串是否为空。如果字符串为空,则打印 "String is empty.";否则,打印 "String is not empty."。

使用 -n 参数

str=""if [ -n "$str" ]; thenecho "String is not empty."
elseecho "String is empty."
fi

与 -z 相反,使用 -n 参数可以检查字符串是否非空。如果字符串非空,则打印 "String is not empty.";否则,打印 "String is empty."。

使用字符串长度进行比较

str=""if [ ${#str} -eq 0 ]; thenecho "String is empty."
elseecho "String is not empty."
fi

${#str} 表示获取字符串 str 的长度。使用 -eq 运算符来比较字符串长度是否为零。如果字符串长度为零,则打印 "String is empty.";否则,打印 "String is not empty."。

注意:在以上示例中,str 变量是一个空字符串。可以将其替换为要检查的实际字符串变量。

总结:字符串或者文件夹为空判断方式都有好多种,我们只需要掌握一种且能解决问题即可,也不用全部掌握。

参考链接:


shell关系运算符-eq -ne -gt -lt -ge -le的用法详解及实例 - 极客库

shell--判断脚本执行时是否有传参、判断文件/文件夹是否存在、判断字符串是否相等、判断上个命令执行是否正常、判断字符串是否为空_shell 判断参数-CSDN博客

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

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

相关文章

全网最详细的安装pytorch GPU方法,一次安装成功!!包括安装失败后的处理方法!

文章目录 前提---查看是否有NVIDIV英伟达显卡【笑哭】一、查看电脑的显卡驱动版本方法一:在cmd命令窗口中输入nvidia-smi,可以发现版本为12.2方法2:点击NVIDIA控制面板→系统信息 二、安装CUDA方法1: 在pytorch官网https://pytorc…

Redis高可用之主从复制及哨兵模式

一、Redis的主从复制 1.1 Redis主从复制定义 主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用; 主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读) 1.2 主从复制流…

学习Python和深度学习基础

1. Python基础知识 学习Python的基本语法、数据类型、控制流等基础知识。掌握常用的Python库,如NumPy和Pandas,它们在深度学习中经常被使用。 2. 深度学习基础 了解深度学习的基本概念,包括神经网络、前向传播、反向传播等。学习深度学习框…

Disasm 示例程序改写和适配

Disasm 示例程序改写和适配 简介 用途 可用于反汇编x86的二进制汇编文件&#xff0c;展示出来内部的反汇编原理和流程。原由 最近在看<<C 反汇编与逆向分析技术揭秘>>这本书籍&#xff0c;在第一张的简介中我们可以看到ProViem这个反汇编开源工具的内容&#x…

无线收发器芯片Si24R1 兼容替代NRF24L01

Si24R1是一款工作在2.4-2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括&#xff1a;频率发生器、集成嵌入式ARQ基带协议引擎、功率放大器、晶体振荡器调制器、解调器。输出功率频道选择和协议的设置可以通过SPI接口进行设置。是目前2.4G无线射频芯片中&#xff0c…

Java 文件处理工具类详解

在软件开发中,文件处理是一个常见的任务,我们经常需要读取、写入和管理文件。为了更便捷地处理文件相关操作,我们编写了一个 FileUtils 工具类,提供了一些有用的文件处理方法。 工具类介绍 FileUtils 工具类包含了一些常用的文件处理方法,主要功能如下: 获取统一的文件…

Git本地库操作

对本地库的操作很少&#xff0c;我们学习1~6节即可&#xff0c;其他了解下。我们可以在idea中完成对本地库还有远程库的操作&#xff0c;可视化界面用起来更加舒适而且也不会混淆。 1. Git概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小…

[个人笔记] Windows配置OpenSSH免密连接

Windows - 运维篇 第七章 Windows配置OpenSSH免密连接 Windows - 运维篇系列文章回顾Windows配置OpenSSH免密连接参考来源 系列文章回顾 第一章 迁移WinSrv系统到虚拟机 第二章 本地安全策略xcopy实现实时备份文件夹内容 第三章 利用cmd自带的icacls命令导出文件的ACL权限 第四…

JavaScript启动本地应用程序

JavaScript调起本地应用程序 以下内容&#xff0c;自定义部分我也还未经过实际验证&#xff0c;酌情查看。 文章目录 JavaScript调起本地应用程序确定协议调用协议传参自定义写入协议获取参数 在浏览器中通过 JavaScript调起本地应用程序的一个可行方法就是 通过协议调起。 …

git 文件被莫名其妙的或略且无论如何都查不到哪个.gitignore文件忽略的

先说解决办法&#xff1a;git check-ignore -v [文件路径] 这个命令会返回一个忽略规则&#xff0c;以及该规则在哪个文件中定义的&#xff0c;该规则使得指定的文件被忽略。 1.遇到的问题 同项目组&#xff0c;其他同学都可以正常的提交.meta文件&#xff0c;我的提交就出现以…

Oracle通过MyBatis执行批量插入与更新问题

最近看一个老项目&#xff0c;使用的Oracle数据库&#xff0c;发现要使用MyBatis执行批量操作还是不太一样。 下面我们来看一下&#xff0c;Oracle数据库&#xff0c;如何使用MyBatis来批量插入和更新。 批量插入 因为Oracle和MySQL的insert还不太一样&#xff0c;Oracle不能…

canal本地安装和使用

1、组件版本 canal.deployer-1.1.7 kafka_2.13-2.6.0 jdk8 apache-zookeeper-3.6.0-bin mysql5.7 2、解压canal.deployer-1.1.7 2.1、修改canal.properties配置文件 ##改为kafka canal.serverModekafka## 改为instance canal.destinations instance## 改为true&#x…

STM32——独立看门狗

文章目录 一、看门狗基础介绍&#xff08;一&#xff09;看门狗概述&#xff1a;&#xff08;二&#xff09;看门狗的作用&#xff1a;&#xff08;三&#xff09;看门狗的原理&#xff1a;&#xff08;四&#xff09;为什么需要使用看门狗来提高系统的可靠性&#xff1a;&…

Linux 中的 rm 命令及示例

Linux 中的 rm 命令及示例 rm命令是Linux中最常见、最基础的命令之一。即使您对 Linux 的使用经验有限&#xff0c;您也很可能听说过它。该命令的主要目的是删除文件和目录。使用此命令删除文件和目录无法撤消。 这意味着您应该谨慎使用此命令&#xff0c;因为如果没有备份&am…

振南技术干货集:制冷设备大型IoT监测项目研发纪实(5)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关 于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护…

Colmap三维重建详解与使用方法

图片捕获过程&#xff0c;请遵循以下指导方针以获得最佳重建结果: 1 捕捉具有良好纹理的图像。避免使用完全没有质感的图片(例如&#xff0c;白色的墙或空桌子)。如果场景本身没有足够的纹理&#xff0c;你可以放置额外的背景对象&#xff0c;如海报等。 2 在相似的照明条件下…

@Value和@Scheduled注解简介

&#xff08;1&#xff09;SpringBoot读取配置文件&#xff0c;使用Value注解获取数据&#xff0c;中文乱码问题解决办法 new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8) &#xff08;2&#xff09;Scheduled注解 例如&#xff0c;Scheduled(…

前端处理返回数据为数组对象且对象嵌套数组并重名的数据,合并名称并叠加数据

前端处理返回数据为数组对象且对象嵌套数组并重名的数据&#xff0c;合并名称并叠加数据 var newList[]; var table{}; var dataObj{}; var finalList[]; var tableData[{brName:营业部,dateStr:2023-11-23,tacheArr:[{dealCnt:20,tacheName:奔驰}]},{brName:营业部,dateStr:2…

TypeError: Cannot read property ‘sendpost‘ of undefined

箭头函数指向问题&#xff0c;定义let that this 解决

大宽带服务器有什么优势?

大宽带服务器有什么优势&#xff1f; 什么是大带宽服务器&#xff1f;从属性上看&#xff0c;大宽带可以分为G口大带宽、万兆大带宽等&#xff0c;从线路上看&#xff0c;可以分为电信、移动、联通等&#xff0c;从地域属性看&#xff0c;可以分为国内宽带、国际宽带。大宽带是…