声明!
学习视频来自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
来连接两个条件。 - 变量
num1
和num2
被双引号包围以确保安全处理。
更改为-o
num1=9
num2=19# 检查num1是否不等于9并且num2是否小于20
if [ "$num1" != "9" -o "$num2" -lt 20 ]; thenecho True
elseecho False
fi