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

 更新时间:2024年01月17日 15:37:52   作者:数哥  
本文主要介绍了shell的条件测试,变量测试,表达式中的0和1,数值判断,字符串判断,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

条件测试

条件测试:判断某需求是否满足。若真,则状态码变量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 条件测试,变量测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux查看磁盘空间的命令详解

    linux查看磁盘空间的命令详解

    本篇文章主要给大家介绍了linux查看磁盘空间的两个命令,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定大帮助,需要的朋友可以参考下
    2023-12-12
  • 通过短信发送LOG归类号码发送情况的shell脚本

    通过短信发送LOG归类号码发送情况的shell脚本

    通过短信发送LOG归类号码发送情况的shell脚本,有需要的朋友可以参考下
    2013-02-02
  • Linux下NC反弹shell命令(推荐)

    Linux下NC反弹shell命令(推荐)

    这篇文章主要介绍了Linux下NC反弹shell命令,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-07-07
  • Linux 中LVS NAT 配置步骤的详解

    Linux 中LVS NAT 配置步骤的详解

    这篇文章主要介绍了Linux 中LVS NAT 配置步骤的详解的相关资料,这里列出详细的实现步骤,需要的朋友可以参考下
    2017-08-08
  • Shell脚本数组用法小结

    Shell脚本数组用法小结

    这篇文章主要介绍了Shell脚本数组用法小结,本文讲解了数组声明、数组遍历、获取数组长度、删除数组元素、数组切片等内容,需要的朋友可以参考下
    2014-09-09
  • linux下监控网络流量的脚本

    linux下监控网络流量的脚本

    在我们的日常工作当中,监控网络要么使用iptarf,ifstat这些命令实现的,但是需要装额外的RPM包。特别是iptarf装起来麻烦
    2013-01-01
  • mac使用Shell(终端)SSH连接远程服务器的方法

    mac使用Shell(终端)SSH连接远程服务器的方法

    这篇文章主要介绍了mac使用Shell(终端)SSH连接远程服务器的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Window11 WSL2 添加静态IP的脚本

    Window11 WSL2 添加静态IP的脚本

    这篇文章主要介绍了Window11 WSL2 添加静态IP的脚本方法,通过一段脚本给 Windows 端的"vEthernet (WSL)"加了IPv4 172.18.16.1,给 Linux 端的 eth0 添加 IPv4 172.18.16.1,在使用前,请按需调整网络接口的名称和IP地址,需要的朋友可以参考下
    2023-01-01
  • Linux终端命令行的常用快捷键详解

    Linux终端命令行的常用快捷键详解

    下面小编就为大家带来一篇Linux终端命令行的常用快捷键详解。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Linux启动过程详细介绍

    Linux启动过程详细介绍

    这篇文章主要介绍了Linux启动过程详细介绍的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论