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

news2024/12/22 20:39:35

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

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

目录

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

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

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博客

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

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

相关文章

做外贸的你崩溃过吗

某日,孔先生问我, 前几天的那个单子怎么样了?看你一会找工厂拍照片,一会找办公室录制视频,半夜还在拿着手机和客户打电话,现在怎么也不提这个进展了,我回答道:黄了。 此时孔先生一股…

静态链表的结构设计与主要操作功能的实现(初始化,头插,尾插,判空,删除,输出,清空,销毁)

目录 一.静态链表的结构设计 二.静态链表的结构设计示意图 三.静态链表的实现 四.静态链表的总结 一.静态链表的结构设计 typedef struct SNode {int data;//数据int next;//后继指针(下标) }SNode,SLinkList[MAXSIZE]; 二.静态链表的结构设计示意图 0:有效数据链的头节点;…

2016年8月15日 Go生态洞察:Go 1.7版本发布

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

基于C#实现Dijkstra算法

或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划”这些经典策略,当然有的问题我们可以用贪心来寻求整体最优解&#xff0…

悦榕集团以养修概念持续引领健康出行

诚邀宾客共赴身、心、灵的回归之旅 【2023年11月22日,中国,上海】作为全球领先的独立酒店集团,悦榕集团一直以来始终秉承可持续发展理念,为宾客打造多层次的身、心、灵平衡之旅。出于对当代人生活方式变化和旅行需求的敏锐洞察&am…

2024免费MacBook清理工具CleanMyMac X4.15

CleanMyMac X 是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级 Mac 上的应用。同时 CleanMyMac X 可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化 Mac 系统&…

关闭vscode打开的本地服务器端口

vscode开了本地的一个端口“8443”当本地服务器端口,然后随手把VScode一关,后来继续做发现8443端口已经被占用了。   原来,即便关闭了编译器VScode,服务器依然是被node.exe运行着的。那这个端口怎么才能关掉呢?   …

首个央企量子云计算项目,中标!

6月29日,北京玻色量子科技有限公司(简称“玻色量子”)成功中标中国移动云能力中心“2023—2024年量子算法及光量子算力接入关键技术研究项目”,这是玻色量子继与移动云签订“五岳量子云计算创新加速计划”后🔗&#xf…

云计算时代来临,传统运维怎样做才能不被“杀死”?

据Forrester Research的数据显示,2021年全球公有云基础设施市场将增长35%,达到1200亿美元,云计算将继续在疫情复苏的过程中“占据中心位置”。 全球用于云计算的IT支出占比将持续增长,企业对于云计算开发人才需求紧迫&#xff0c…

甄知燕千云与SAP、EBS、TC、NS等应用深度集成,智能提单一键畅通,效能一键提升

当今全球化时代下,全球商业环境面临前所未有的机遇和挑战,企业需要持续的业务变革、组织优化来进行降本增效,企业管理软件已成为中小企业、大型企业数字化转型不可或缺的管理工具,企业内管理软件系统也越来越多。 为了适应当前企业…

11-@Transaction与AOP冲突解决

如题,最近碰到了一个问题,在public方法上添加Transaction没有生效,事务没有回滚。 我自己模拟了一个功能,向数据库表User里面插入用户数据。说一下代码背景, 数据库MySQL,持久化层Mybatis,项目使…

Matlab三角剖分插值问题分析

目录 前言 一、问题引入 二、一个例子 1.生成散点图 2.对数据进行剖分 3.点法式分析 三、最后结果 前言 上一篇文章感觉对三角剖分问题没有说清楚,这次专门对三角剖分问题再仔细说说。 一、问题引入 实际上这个问题是用来解决二维曲面插值问题的。 二维插值问题&…

GWAS结果批量整理:升级版算法TidyGWAS

TidyGWAS GWAS分析关键结果之一是显著性SNP位点的P值,通常多年份多地点多模型的GWAS分析将会产生很多结果文件,如何对这些数据进行整理? 汇总这些结果,并将显著性的位点或区域找出来,更加清晰的展示关键信息。 今天介…

文旅虚拟人IP:数字时代的传统文化推荐官

近几年,随着文旅虚拟人频“上岗”,虚拟人逐渐成为了文旅品牌的一种新颖的传统文化传播思路。 文旅品牌定制化推出虚拟人,本质原因是2023旅游业全面复苏,各文旅玩法同质化现象严重,在这样的境遇下,文旅品牌开…

AIGC专题报告:生成式人工智能用例汇编

今天分享的是AIGC系列深度研究报告:《AIGC专题报告:生成式人工智能用例汇编》。 (报告出品方:德勤) 报告共计:16页 生成式人工智能(AI)的兴起 生成式AI给人类文明创造了无限的可…

【【Linux 常用命令学习 之 一 】】

Linux 常用命令学习 之 一 打开终端之后的 我们会了解 所使用的 字符串含义 其中前面的 zhuxushuai 是 当前的用户名字 接下来的 zhuxushuai-virtual-machine 是 机器名字 最后的符号 $表示 当前是普通用户 输入指令 ls 是打印出当前所在目录中所有文件和文件夹 shell 操…

python-冒泡排序

冒泡排序 (稳定) O(n^2) (稳定:表示相等的数,相对位置会不会改变) 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次遍历待排序的元素,比较相邻两个元素的大小并交换它们&…

周转箱与工具柜的智能化应用

在当今制造业激烈竞争的市场中,6S管理方法作为提高企业竞争力的有力工具,与精益生产中的周转箱和工具柜相结合,将为企业带来更大的优势。通过实施6S管理方法,企业不仅能够提高生产效率、降低成本,还能够改善产品质量、…

​ 一文带你了解多文件混淆加密

​🔒 一文带你了解多文件混淆加密 目录 🔒 一文带你了解 JavaScript 多文件混淆加密 ipaguard加密前 ipaguard加密后 ​ 🔒 一文带你了解 JavaScript 多文件混淆加密 JavaScript 代码多文件混淆加密可以有效保护源代码不被他人轻易盗取。…

牛客 HJ106 字符逆序 golang实现

牛客题目算法连接 题目 golang 实现 package mainimport ("fmt""bufio""os" )func main() {str, _ : bufio.NewReader(os.Stdin).ReadString(\n)if len(str) 0 {return } else {newstr:""strLen:len(str)-1for i:strLen;i>0;i-…