bash 运算表达式求值 test, [],[[]]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bash 逻辑运算表达式值 test , [], [[]]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

test 与 [] 是等价的, [[]] 是对[] 的功能扩充,但老版本的bash或精简版bash可能不支持。

****************************************
test 测试, 逻辑运算府区分字符串与数字
****************************************
----------------------------------------
[root@hjj ~]# test 1=2 && echo ok
ok
错误原因,运算符两边必须用空格分开,不能连在一起
而let 语句为变量赋值则=两边不能由空格
----------------------------------------

========================================
test 测试 =, 实际是字符串比较
========================================
[root@hjj ~]# test 1 = 1 && echo ok
ok
[root@hjj ~]# test 1 = 2 && echo ok
[root@hjj ~]# test a = b && echo ok
[root@hjj ~]# test a = a && echo ok
ok


========================================
test 测试 eq 只能用于整数比较
========================================
[root@hjj ~]# test 1 -eq 1 && echo ok
ok
[root@hjj ~]# test 1 -eq 2 && echo ok
[root@hjj ~]# test a -eq a && echo ok
bash: test: a: integer expression expected

****************************************
精简表达式 [ ] , 可以取代test
****************************************
============================================================
[] 测试<, > 要加转以符\,  <, > 字符串
============================================================

----------------------------------------
错误原因: < 号前没有加\
ot@hjj ~]# [ 1 < 2 ] && echo ok
ok
[root@hjj ~]# [ 1 > 2 ] && echo ok
ok
----------------------------------------


ot@hjj ~]# [ 1 \> 2 ] && echo ok
[root@hjj ~]# [ 1 \< 2 ] && echo ok
ok
----------------------------------------
由此可见, \< , \> 是按字符串比较
[root@hjj ~]# [ 10 \< 2 ] && echo ok
ok
[root@hjj ~]# [ 10 \> 2 ] && echo ok
----------------------------------------

========================================
[] 测试 && || 操作符需要用-a -o 代替
========================================
[root@hjj ~]# [ 1 -lt 2 && 2 -lt 3 ] && echo ok
bash: [: missing `]'
[root@hjj ~]# [ 1 -lt 2 -a 2 -lt 3 ] && echo ok
ok

********************************************************************************
[[]] 表达式, 能够支持<, > 运算符而不用转义, 能够支持&&, ||运算府
********************************************************************************
[root@hjj ~]# [[ 2 > 1 ]] && echo ok
ok
[root@hjj ~]# [[ 1 > 2 ]] && echo ok
[root@hjj ~]# [[ 2 > 1 && 3 > 2 ]] && echo ok
ok
[root@hjj ~]# [[ 2 > 1 && 2 > 3 ]] && echo ok
[root@hjj ~]# [[ b > a ]] && echo ok
ok
[root@hjj ~]# [[ a > b ]] && echo ok
[root@hjj ~]#


总结:
-eq, -ne, -lt, -gt, -le, -ge 只能用于整形比较
=, !=, <, > 只用于字符串

此外测试字符串是否为空: -z, -n

[] 内的组合条件用-a, -o

[[]] 内的组合条件可以用 && , ||


另外,bash 算术表达式求值用$(()), 或$[] 来计算

---------------------------------------
字符串变量的比较,= == 都可以, 字符串变量最好加上双引号
否则,可能出现 too many arguments
----------------------------------------
[root ~]$ a="abc def"
[root ~]$ echo $a
abcroot def
[root ~]$ if [ $a = "abc def" ] ;then echo yes;else echo no;fi
bash:root [: too many arguments
no
[root ~]$ if [ "$a" = "abc def" ] ;then echo yes;else echo no;fi
yes
----------------------------------------
if 语句(测试语句)的简单写法
----------------------------------------
[root ~]$ [ "$a" = "abc def" ] && echo yes || echo no
yes
[root ~]$ [ "$a" = "abc defd" ] && echo yes || echo no
no

~                                                                                                   
~                                                     

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hejinjing_tom_com/article/details/17116453
个人分类: bash 编程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

bash 运算表达式求值 test, [],[[]]

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭