linux shell 条件测试详解

15 篇文章 0 订阅

这里文章名虽为条件测试详解,但实质上是  linux shell 条件测试(https://blog.csdn.net/zhang_referee/article/details/83714064) 的案例补充。

文章主要内容如下:

  1. 字符串测试
  2. 整数测试

                                 字符串测试

  如果你看过上篇文章--linux  shell 条件测试(https://blog.csdn.net/zhang_referee/article/details/83714064)的话,会发现下面这个表也存在于上篇文章,这里再次单独列出来,方便阅读。

常用字符串测试操作符说明
-z "字符串" 若长度为0 则真,-z 可以理解为zero
-n 字符串" 若长度不为0则真,-n 可以理解为no zero 
"串1" = "串2" 若串1 等于串2则真,可使用"==" 代替 "="
"串1" != "串2"若串1不等于串2则真
zhang@zhang:~$ echo $file $file1

zhang@zhang:~$ [ -n "$file" ] && echo 1 || echo 0
0
zhang@zhang:~$ [ -z "$file" ] && echo 1 || echo 0
1
zhang@zhang:~$ [ -n $file ] && echo 1 || echo 0

 -n 指字符串长度不为0 则真,当我们去掉变量的""(双引号)后,可以发现虽然没有出错,但执行结果已然不正确。

这里提一下,在进行字符串操作的时候,建议要加上双引号。

zhang@zhang:~/Code/Shell$ echo "the variable file1 is $file1" ; echo "the variable file2 is $file2"
the variable file1 is 
the variable file2 is test.sh
zhang@zhang:~/Code/Shell$ [ -n "$file1" -a -n "$file2" ] && echo 1 || echo 0
0
zhang@zhang:~/Code/Shell$ [ -z "$file1" -a -n "$file2" ] && echo 1 || echo 0
1
zhang@zhang:~/Code/Shell$ [[ -z "$file1" && -n "$file2" ]] && echo 1 || echo 0
1
zhang@zhang:~/Code/Shell$ 

zhang@zhang:~/Code/Shell$ echo $file

zhang@zhang:~/Code/Shell$ echo $file1

zhang@zhang:~/Code/Shell$ [ "$file1" =  "$file" ] && echo 1 || echo 0
1
zhang@zhang:~/Code/Shell$ [ "$file1" != "$file" ] && echo 1 || echo 0
0
zhang@zhang:~/Code/Shell$ 

                                        整数测试

在[] 中使用的比较符在(()) 和 [[]] 中使用的比较符说明
-eq ==  equal 的缩写,相等
-ne  != not equal 的缩写,不相等
-gt >大于greater than 
-ge>= 大于等于greater than
-lt  小于less than
-le  <=小于等于less equal    
zhang@zhang:~/Code/Shell$ int1=14;int2=25
zhang@zhang:~/Code/Shell$ echo $int1; echo $int2
14
25
zhang@zhang:~/Code/Shell$ [ $int1 -eq $int2 ] && echo 1 || echo 0
0
zhang@zhang:~/Code/Shell$ [ $int1 -lt $int2 ] && echo 1 || echo 0
1
zhang@zhang:~/Code/Shell$ [ $int -ge $int2 ] && echo 1 || echo 0
bash: [: -ge: 需要一元表达式
0
zhang@zhang:~/Code/Shell$ [ $int1 -ge $int2 ] && echo 1 || echo 0
0
zhang@zhang:~/Code/Shell$ [ $int1 -le $int2 ] && echo 1 || echo 0
1
zhang@zhang:~/Code/Shell$ 

       
  直接通过数学运算符比较

zhang@zhang:~$ int1=14;int2=25
zhang@zhang:~$ echo $int1;echo $int2
14
25
zhang@zhang:~$ [ $int1 > $int2 ] && echo 1 || echo 0
1
zhang@zhang:~$ [ $int1 \> $int2 ] && echo 1 || echo 0
0
zhang@zhang:~$ [ $int1 < $int2 ] && echo 1 || echo 0
1
zhang@zhang:~$ [ $int1 \< $int2 ] && echo 1 || echo 0
1
zhang@zhang:~$ (( $int1 > $int2 )) && echo 1 || echo 0
0
zhang@zhang:~$ [ $int1 = $int2 ] && echo 1 || echo 0
0
zhang@zhang:~$ [ $int1 == $int2 ] && echo 1 || echo 0
0
zhang@zhang:~$ [ $int1 != $int2 ] && echo 1 || echo 0
1
zhang@zhang:~$ 


     
PS:在[] 语法中使用  > (d大于号)  ,< (小于号)要进行转义 。

也可以使用test 语法:

zhang@zhang:~$ test $int1 > $int2 && echo 1 || echo 0
1
zhang@zhang:~$ test $int1 \> $int2 && echo 1 || echo 0
0
zhang@zhang:~$ test $int1 == $int2 && echo 1 || echo 0
0
zhang@zhang:~$ test $int1 < $int2 && echo 1 || echo 0
1
zhang@zhang:~$ test $int1 \< $int2 && echo 1 || echo 0
1
zhang@zhang:~$ echo $int1;echo $int2
14
25
zhang@zhang:~$ 

可以看到在test 语法中,同样也是需要对< 、> 进行转义的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值