【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 ]; then
    echo "1 - 100"
else 
    echo "大于100"
fi

执行结果:


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


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

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

if [ $# -eq 0 ]; then
    echo "没有参数."
else
    echo "参数个数: $#"
fi

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

2.2 使用$1参数

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

if [ "$1" ];then
    echo "带参数";
else
    echo "没有带参数 "
fi

执行结果:


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


3.1 判断文件是否存在

if [ -f "/var/log/messages" ]; then
    echo "文件存在."
else
    echo "文件不存在"
fi

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

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

if [[ -f "/path/to/file" ]]; then
    echo "File exists."
else
    echo "File does not exist."
fi

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

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

if test -e "/var/log/messages"
then
    echo "文件存在."
else
    echo "文件不存在"
fi

执行结果:

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

3.2 判断文件夹是否存在

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

if [ -d "/path/to/directory" ]; then
    echo "Directory exists."
else
    echo "Directory does not exist."
fi

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

使用 test

if test -d "/path/to/directory"; then
    echo "Directory exists."
else
    echo "Directory does not exist."
fi

 执行结果:


四、判断字符串是否相等


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

str1="hello"
str2="hello"
 
if [ "$str1" == "$str2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

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

4.2 使用 = 进行比较

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

执行结果:


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


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

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

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

# 正确的 命令
java -version
echo $?
if [ $? -eq 0 ]; then
    echo "Command executed successfully."
else
    echo "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" ]; then
    echo "String is empty."
else
    echo "String is not empty."
fi

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

使用 -n 参数

str=""
 
if [ -n "$str" ]; then
    echo "String is not empty."
else
    echo "String is empty."
fi

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

使用字符串长度进行比较

str=""
 
if [ ${#str} -eq 0 ]; then
    echo "String is empty."
else
    echo "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博客

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

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

相关文章

无损压缩技巧:减小PDF文件尺寸的有效方法

我们在制作pdf文档的时候,会加入许多内容,文字、图片等等,素材添加的过多之后就会导致pdf文档特别大,在上传或者储存时,就会特别不方便,所以今天就告诉大家一个pdf压缩的方法,使用pdf在线压缩工…

【C++】:STL中的string类的增删查改的底层模拟实现

本篇博客仅仅实现存储字符(串)的string 同时由于Cstring库设计的不合理,我仅实现一些最常见的增删查改接口 接下来给出的接口都是基于以下框架: private:char* _str;//思考如何不用constsize_t _size;size_t _capacity;//这样写可以const static size_t…

csdn最新最全的Selenium教程:定位frame框架中的元素

定位frame框架中的元素 在web应用中经常会出现frame嵌套的应用,假设页面上有A,B两个frame,其中B在A内,那么定位B中的内容则需要先到A,再到B。 switch_to.frame方法可以把当前定位的主题切换到frame里,在frame里实际是嵌套了另外一…

Android Studio xml文件id爆红但是项目可以运行

这种原因是你的R文件太大了(超过了Android Studio的上限25.6M了) 解决办法如下: Help -> Edit Custom Properties -> create custom properties?(yes) ->添加 idea.max.intellisense.filesize5000 最后需要重启Android Studio

【double check 读写锁】

使用double check 读写锁 读多写少场景 记录下 //来源 jdbc 中的查询连接信息 //public abstract class ConnectionUrl implements DatabaseUrlContainer public static ConnectionUrl getConnectionUrlInstance(String connString, Properties info) {if (connString null…

算法刷题-动态规划2(继续)

算法刷题-动态规划2 珠宝的最高价值下降路径最小和 珠宝的最高价值 题目 大佬思路 多开一行使得代码更加的简洁 移动到右侧和下侧 dp[ i ][ j ]有两种情况: 第一种是从上面来的礼物最大价值:dp[ i ][ j ] dp[ i - 1 ][ j ] g[ i ][ j ] 第二种是从左…

【MySQL】宝塔面板结合内网穿透实现公网远程访问

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cpo…

Course1-Week2-多输入变量的回归问题

Course1-Week2-多输入变量的回归问题 文章目录 Course1-Week2-多输入变量的回归问题1. 向量化和多元线性回归1.1 多维特征1.2 向量化1.3 用于多元线性回归的梯度下降法 2. 使梯度下降法更快收敛的技巧2.1 特征缩放2.2 判断梯度下降是否收敛2.3 如何设置学习率 3. 特征工程3.1 选…

react中的state

没想到hooks中也有state这一说法 看下面的两个案例 1、无state变化不会执行父子函数 2、有state更改执行父子函数

竞赛选题 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…

数据提取PDF SDK的对比推荐

PDF 已迅速成为跨各种平台共享和分发文档的首选格式,它作为一种数据来源,常见于公司的各种报告和报表中。为了能更好地分析、处理这些数据信息,我们需要检测和提取 PDF 中的数据,并将其转换为可用且有意义的格式。而数据提取的 PD…

【Spring进阶系列丨第四篇】Spring的Bean管理(基于xml的配置)

前言 我们知道,容器是一个空间的概念,一般理解为可盛放物体的地方。在Spring容器通常理解为BeanFactory或者ApplicationContext。我们知道spring的IOC容器能够帮我们创建对象,对象交给spring管理之后我们就不用手动去new对象。 那么Spring是如…

服务号可以迁移到订阅号吗

服务号和订阅号有什么区别?服务号转为订阅号有哪些作用?首先我们要看一下服务号和订阅号的主要区别。1、服务号推送的消息没有折叠,消息出现在聊天列表中,会像收到消息一样有提醒。而订阅号推送的消息是折叠的,“订阅号…

2023“亚太杯”大学生数学建模竞赛

2023亚太杯数学建模C题 中国新能源电动汽车的发展趋势 解题思路、数据 该题并没有提供数据集,对所需数据进行收集整理是对题目进行求解的基础。在本题中,主要需要以下数据:新能源汽车历史销售量、新能汽车相关专利的历史数量、充电桩历史数…

【外贸商机篇】黑色星期五来啦,跨境电商必备手册!

黑色星期五是每年11月的第四个星期五,三天后是网络星期一。这两个购物日是美国一年中最繁忙的购物日之一,仅在2021年的感恩节周末,电子商务收入估计就达到196亿美元。 在一项Statista调查中,美国消费者被问及他们计划购买哪些商品…

太赫兹涂层测厚:为汽车制造商保驾护航

太赫兹涂层测厚:为汽车制造商保驾护航 近年来,专用于测量任何表面涂层厚度的IRYS太赫兹系统,成功赢得了包括大众和丰田在内的全球领先整车厂的信任。 为了实现这一目标,IRYS系统经过了许多制造商为甄选值得信赖的技术供应商而设置…

软件开发及交付中,如何平衡项目进度和团队成员的利益?

在平衡软件质量与时间、成本、范围的关系时,需要考虑到项目管理的金三角概念,即时间、成本和范围。从项目管理的角度来看,项目进度和团队成员的利益需要平衡。 以下是一些建议: 制定可行的计划:让项目相关各方充分参与…

我劝烂了,这东西大学生早用早解脱

大学生看我,这个东西太太太香了啊!!! 要写论文,写总结的都给我用起来 这东西能自动写文章,想写几篇就写几篇,篇篇不重复!只要输入一个标题,马上就能生成一篇。真的贼香…

目前软件测试行业发展如何?第三方软件检测机构是否是未来趋势?

随着软件行业的快速发展,软件质量的重要性日益凸显,软件测试也成为了软件开发过程中不可或缺的环节。那么目前软件测试行业的发展如何?第三方软件检测机构又是否是未来软件测试的趋势呢?接下来我们将从多个角度为您详细解答。 目前软件测试行业呈现快…

老师检查家庭作业的作用

在教育体系中,老师检查家庭作业是一种常见的教学方式,旨在帮助学生巩固课堂所学知识,提高自学能力,以及培养良好的学习习惯。家庭作业是学生学习过程中不可或缺的一环,而老师对家庭作业的检查则起到了至关重要的作用。…