shell的条件测试,变量测试,表达式中的0和1,数值判断,字符串判断

2024-03-01 0 875
目录

条件测试

条件测试:判断某需求是否满足。若真,则状态码变量0; 返回若假,则状态码变量,返回1

条件测试命令

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

注意:EXPRESSION前后必须有空白字符

变量测试

-v VAR或者[ -v VAR]变量VAR是否设置注: 变量的条件测试其实就是判断变量是否定义

[root@zaishu ~]# unset a //重置变量,表示变量没有被定义
[root@zaishu ~]# test -v a
[root@zaishu ~]# echo $?
1

[root@zaishu ~]# a=1 //变量已定义
[root@zaishu ~]# test -v a
[root@zaishu ~]# echo $? //所以判断为真
0

[root@zaishu ~]# a=\’\’
[root@zaishu ~]# test -v a
[root@zaishu ~]# echo $?
0

[root@zaishu ~]# a=\”\”
[root@zaishu ~]# test -v a
[root@zaishu ~]# echo $?
0

[root@zaishu ~]# [ -v b ]
[root@zaishu ~]# echo $?
1

[root@zaishu ~]# [ -v a ]
[root@zaishu ~]# echo $?
0

表达式中的0或1

表达式中的数字0或1,并不代表真假,每个表达式执行完,退出的时候,都会返回一个退出状态码。if语句根据 [ ] 表达式执行的退出状态码进行判断,在所有的退出状态码中,0表示执行成功,其他退出状态码都为假。这是与C语言不同的。

[root@zaishu sh]# cat tru.sh
#!/bin/bash
if [ 1 ]; //这其实返回值是为0,为真
then echo \’ok\’;
fi

[root@zaishu sh]# ./tru.sh
[root@zaishu sh]# ok

[root@zaishu sh]# cat tru.sh
#!/bin/bash
if [ 0 ]; //这其实返回值是为0,为真
then echo \’ok\’;
fi

[root@zaishu sh]# ./tru.sh
[root@zaishu sh]# ok

数值测试

-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于

[root@zaishu sh]# a=1
[root@zaishu sh]# b=2
[root@zaishu sh]# [ $a -lt $b ]
[root@zaishu sh]# echo $?
0
[root@zaishu sh]# [ $a -gt $b ]
[root@zaishu sh]# echo $?
1

[root@zaishu sh]# cat num.sh
#!/bin/bash
a=30
b=20
if [ $a != $b ]
then
echo \”$a !=$b:a != b\”
else
echo \”$a !=$b:a = b\”
fi

if [ $a -lt 100 -a $b -gt 15 ]
then
echo \”$a 小于 100 且 $b 大于 15 : 返回 true\”
else
echo \”$a 小于 100 且 $b 大于 15 : 返回 false\”
fi

if [ $a -lt 100 -o $b -gt 100 ]
then
echo \”$a 小于 100 或 $b 大于 100 : 返回 true\”
else
echo \”$a 小于 100 或 $b 大于 100 : 返回 false\”
fi

if [ $a -lt 5 -o $b -gt 100 ]
then
echo \”$a 小于 5 或 $b 大于 100 : 返回 true\”
else
echo \”$a 小于 5 或 $b 大于 100 : 返回 false\”
fi

[root@zaishu sh]# ./num.sh
30 !=20:a != b
30 小于 100 且 20 大于 15 : 返回 true
30 小于 100 或 20 大于 100 : 返回 true
30 小于 5 或 20 大于 100 : 返回 false

字符串测试

  • 常见比较符

-z \”STRING\” 字符串是否为空,空为真,不空为假
-n \”STRING\” 字符串是否不空,不空为真,空为假
= 是否等于
!= 是否不等于
> ascii码是否大于ascii码
< 是否小于
== 左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的PATTERN所匹配
注意: 此表达式用于[[ ]]中;扩展的正则表达式

  • 单引号和双引号的区别对类型来说是无关的。单引号不对相关量进行替换,如不对$符号解释成变量引用,从而用对应变量的值替代,双引号则会进行替代。

  • 字符匹配示例

[root@zaishu sh]# unset str
[root@zaishu sh]# [ -z \”str\” ] //为空,所以表达式返回值为真
[root@zaishu sh]# echo $?
0
[root@zaishu sh]# unset str
[root@zaishu sh]# [ -z \”str\” ]
[root@zaishu sh]# echo $?
1
[root@zaishu sh]# [ -z \”$str\” ]
[root@zaishu sh]# echo $?
0
[root@zaishu sh]# str=\”\”
[root@zaishu sh]# [ -z \”$str\” ]
[root@zaishu sh]# echo $?
0
[root@zaishu sh]# str=\” \”
[root@zaishu sh]# [ -z \”$str\” ]
[root@zaishu sh]# echo $?
1
[root@zaishu sh]# [ -n \”$str\” ]
[root@zaishu sh]# echo $?
0
[root@zaishu sh]# str=zaishu
[root@zaishu sh]# [ \”$str\” ]
[root@zaishu sh]# echo $?
0
[root@zaishu sh]# str1=zaishu
[root@zaishu sh]# str2=shuge
[root@zaishu sh]# [ \”$str1\” = \”str2\” ]
[root@zaishu sh]# echo $?
1
[root@zaishu sh]# str2=zaishu
[root@zaishu sh]# [ \”$str1\” = \”$str2\” ]
[root@zaishu sh]# echo $?
0

[root@zaishu sh]# cat str.sh
#!/bin/sh

str1=\”abc\”
str2=\”abc\”
str3=\”\”

echo \”输入的原始值:str1=$str1,str2=$str2\”

#判断字符串是否相等
if [ \”$str1\” = \”$str2\” ];then
echo \”$str1 = $str2\”
fi

echo \”在[]中==与=等价\”
if [ \”$str1\” == \”$str2\” ];then
echo \”$str1 == $str2\”
fi

#字符串不相等
if [ \”$str1\” != \”$str2\” ];then
echo \”[ != ]\”
fi

#字符串不相等
if [[ \”$str1\” != \”$str2\” ]];then
echo \”[[ != ]]\”
fi

#字符串不为空,长度不为0
if [ -n \”$str1\” ];then
echo \”不为空\”
fi

#字符串为空.就是长度为0.
if [ -z \”$str3\” ];then
echo \”str3长度为0,为空\”
fi

[root@zaishu sh]# ./str.sh
输入的原始值:str1=abc,str2=abc
abc = abc
在[]中==与=等价
abc == abc
不为空
str3长度为0,为空

  • 模式匹配

[root@zaishu sh]# file=shuge.log
[root@zaishu sh]# [[ \”$file\” == *.log ]]
[root@zaishu sh]# echo $?
0
[root@zaishu sh]# [[ \”$file\” == *.txt ]]
[root@zaishu sh]# echo $?
1

[root@zaishu sh]# [[ \”$file\” != *.txt ]]
[root@zaishu sh]# echo $?
0

[root@zaishu sh]# cat str.sh
#!/bin/sh

str3=\”def\”

echo \”==的功能在[[]]和[]中的行为是不同的\”

#如果$str3以”d”开头(模式匹配)那么将为true
if [[ \”$str3\” == d* ]];then
echo \”str3是以d开头的\”
fi

#如果$str3在进行字符匹配时候,结果为false
if [ \”$str3\” == d* ];then
echo \”==/\”d*/\”\”
fi

if [[ \”$str3\” == \”d*\” ]];then
echo \”==/\”d*/\”\”
fi

#结果为true
if [[ \”$str3\” = d* ]];then
echo \”=/\”d*/\”\”
fi

[root@zaishu sh]# ./str.sh
#==的功能在[[]]和[]中的行为是不同的
#str3是以d开头的
#=/d*/

  • 正则表达式匹配

[root@zaishu sh]# [[ \”$file\” =~ \\txt$ ]]
[root@zaishu sh]# echo $?
1

[root@zaishu sh]# [[ \”$file\” =~ \\log$ ]] //字符串是以log结尾
[root@zaishu sh]# echo $?
0

[root@zaishu sh]# num=10
[root@zaishu sh]# [[ \”$num\” =~ ^[0-9]+$ ]]
[root@zaishu sh]# echo $?
0

[root@zaishu sh]# str=a10
[root@zaishu sh]# [[ \”$str\” =~ ^[0-9]+$ ]]
[root@zaishu sh]# echo $?
1

[root@zaishu sh]# ip=10.11.12.13
[root@zaishu sh]# [[ \”$ip\” =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]] //用于匹配IP
[root@zaishu sh]# echo $?
0

总结

到此这篇关于shell的条件测试,变量测试,表达式中的0和1,数值判断,字符串判断的文章就介绍到这了,更多相关shell 条件测试,变量测试内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • Shell条件语句(条件测试、if语句、case语句)
  • Shell编程条件测试的实现
  • Shell脚本的条件测试和if条件语句使用方法

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 linux shell shell的条件测试,变量测试,表达式中的0和1,数值判断,字符串判断 https://www.u-9.cn/jiaoben/linuxshell/179660.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务