shell编程5,字符串运算符

devtools/2024/11/29 15:58:47/

声明!
学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec

shell5,字符串运算符

字符串运算符

[[ ... ]][...]

首先我们在终端利用vim打开u.sh
内容为:

str1="hello"
str2="hello"if [[ "$str1" == "$str2" ]]; thenecho True
elseecho false
fi
  • 使用==来比较两个字符串是否相等。
  • 使用双方括号[[ ... ]]来进行字符串比较,它支持模式匹配和更复杂的表达式。
  • 变量应当用双引号包围,以确保即使变量值为空或包含空格时也能正确处理。
    在这里插入图片描述

提示[[: not found。这通常是因为shell环境不支持[[ ... ]]条件表达式,这可能是由于您使用的是一个较旧的或非常基础的shell版本,比如sh(Bourne shell),它不支持这种语法。
kail默认使用sh解释器,我们可以使用bash解释器,因为在kali中sh解释器的其实最终用的dash解释器,而dash解释器是bash解释器的简化版

在这里插入图片描述

当然了,我们如果要使用sh解释器,也可以使用旧的语法

str1="hello"
str2="hello"if [ "$str1" = "$str2" ]; thenecho True
elseecho false
fi

注意以下几点:

  • 使用单个等号=
  • 确保在[]两边都有空格。
  • 变量仍然需要用双引号包围以确保安全处理。
    在这里插入图片描述

上面的两个例子中,双引号都是可以省略的,加上可以确保即使变量值为空或包含空格时也能正确处理
在这里插入图片描述

大小写是否敏感

我们可以更改str1为Hello,来看看效果

str1="Hello"
str2="hello"if [ $str1 = $str2 ]; thenecho True
elseecho false
fi

在这里插入图片描述

我们使用!=在来看看他们是否不想等

str1="Hello"
str2="hello"if [ $str1 != $str2 ]; thenecho True
elseecho false
fi

在这里插入图片描述

可以发现,对大小写敏感

检查字符串的长度是否为0、不为0

str1="hello"
str2="helllo"# 检查str1的长度是否为0
if [ -z "$str1" ]; thenecho True  # 如果str1长度为0,则输出True
elseecho False  # 否则输出False
fi

在这里插入图片描述

  • 使用-z来检测字符串长度是否为零。
  • 变量名$str1应该被双引号包围以防止空值或包含空格的值导致的问题。
  • if[之间以及[和条件表达式之间需要有空格。
  • then关键字之前也需要有一个空格。

使用-n测试来检查字符串是否不为空。如果字符串不为空,则返回True;如果字符串为空,则返回False。我们将把str1改为str11并检查其长度。

# 定义变量
str11=""  # 这里设置为一个空字符串# 检查str11的长度是否不为0
if [ -n "$str11" ]; thenecho True  # 如果str11不为空,则输出True
elseecho False  # 如果str11为空,则输出False
fi

在这里插入图片描述

逻辑运算符之布尔运算符

# 定义变量
num1=9# 检查num1是否不等于9
if [ "$num1" != "9" ]; thenecho "num1不等于9"
elseecho "num1等于9"
fi

在这里插入图片描述

  • 使用单方括号[ ... ]来进行条件测试。
  • 使用!=来检查num1是否不等于9。
  • 变量num1被双引号包围以确保安全处理。
  • if语句的格式已经正确调整。
-a和-o 参数

-a来连接两个条件,相当于&&
-o来连接两个条件,相当于||

num1=9
num2=19# 检查num1是否不等于9并且num2是否小于20
if [ "$num1" != "9" -a "$num2" -lt 20 ]; thenecho True
elseecho False
fi
  • 使用单方括号[ ... ]来进行条件测试。
  • 使用!=来检查num1是否不等于9。
  • 使用-lt来检查num2是否小于20。
  • 使用逻辑与运算符-a来连接两个条件。
  • 变量num1num2被双引号包围以确保安全处理。
    在这里插入图片描述

更改为-o

num1=9
num2=19# 检查num1是否不等于9并且num2是否小于20
if [ "$num1" != "9" -o "$num2" -lt 20 ]; thenecho True
elseecho False
fi

在这里插入图片描述


http://www.ppmy.cn/devtools/137959.html

相关文章

Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!

前言 我们先简单了解一下PyTorch、Keras、Scikit-learn和TensorFlow都是什么。 想象一下你要盖一座大房子。你需要砖头、水泥、工具等等,对吧?机器学习也是一样,需要一些工具来帮忙。PyTorch、Keras、Scikit-learn和TensorFlow就是四种不同的…

线程的生命周期

线程的生命周期描述了线程从创建到消亡的整个过程,以及在这个过程中线程所经历的不同状态。以下是线程生命周期的详细解释: 一、新建(NEW) 当使用new关键字创建一个线程对象时,线程进入新建状态。此时,线…

Flink 之 Window 机制详解(上):基础概念与分类

《Flink 之 Window 机制详解(上):基础概念与分类》 一、引言 在当今大数据蓬勃发展的时代,Flink 作为一款卓越的分布式流处理和批处理框架,以其独特的架构和强大的功能在数据处理领域占据着重要地位。其底层基于流式…

SQL Server 中的游标:介绍、效率、使用场景及替代方法对比

在 SQL Server 中,游标(Cursor)是一种数据库对象,用于逐行处理查询结果集。虽然游标在某些场景下非常有用,但它们的性能往往不如集合操作(set-based operations)。本文将详细介绍游标的概念、使…

设计模式---单例模式

单例模式:确保一个类只有一个实例,并提供该实例的全局访问点, 本文介绍6中常用的实现方式 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么…

怀念食家巷平凉面点,重拾美好

在美食的长河中,总有一些味道能勾起我们内心深处最温暖的回忆。食家巷平凉面点,便是这样一种带着浓郁乡愁与美好记忆的传统美食。平凉,这座历史悠久的城市,孕育出了独具特色的面点文化。食家巷的平凉面点白饼、烤馍,传…

faiss VS ChromaDB

faiss faiss 是一个开源的机器学习库,由Facebook AI Research(FAIR)开发,主要用于高效的大规模向量搜索和聚类。 faiss 的核心优势在于它为高维向量空间中的数据提供了快速的近似最近邻搜索(ANNS)算法&am…

DevOps工程技术价值流:Jenkins驱动的持续集成与交付实践

一、Jenkins系统概述 Jenkins:开源CI/CD引擎的佼佼者 Jenkins,作为一款基于Java的开源持续集成(CI)与持续交付(CD)系统,凭借其强大的插件生态系统,成为DevOps实践中不可或缺的核心…