07-shell if条件测试和比较

if条件测试常用的语法

  • test <测试表达式>
  • [ <测试表达式> ]
  • [[ <测试表达式> ]]
  • ((<测试表达式>))

test命令和[]测试操作符

  • test <测试表达式>
  • [ <测试表达式> ]

(这两种语法是等价的)

测试操作符 全拼 说明
-d directory 文件存在且为目录
-f file 文件存在且为普通文件
-e exist 文件存在
-r read 文件存在且可读
-s size 文件存在且文件大小不为0
-w write 文件存在且可写
-x exexutable 文件存在且可执行
-L link 文件存在且为链接文件
f1 -nt f2 newer than 文件f1比文件f2新
f1 -ot f2 olderthan 文件f1比文件f2旧
-n not zero 字符串的长度不为0
-z zero 字符串的长度为0
s1 = s2   字符串1等于字符串2
s1 != s2   字符串1不等于字符串2
-eq equal 相等
-ne not equal 不相等
-gt greater than 大于
-ge greater equal 大于等于
-lt less than 小于
-le less equal 小于等于
-a and
-o or
! not

范例:

test -f /data/test.sh && echo true || echo false
[ -f /data/test.sh ] && echo true || echo false
  • 用[]测试变量时,如果被测试的变量不加双引号,那么测试结果可能会是不正确的:
file1=/etc/passwd
[ -f "$file1" ] && echo 1 || echo 0

如果是文件实体路径,那么加引号与不加引号的结果是一样的:
[ -f "/etc/passwd" ] && echo 1 || echo 0
[ -f /etc/passwd ] && echo 1 || echo 0

[[]]测试操作符

  • [[ <测试表达式> ]]
在[[]]中可以使用通配符等进行模式匹配
[[ ! $a =~ [1-3] ]] && echo 1 || echo 0
测试操作符 全拼 说明
-d directory 文件存在且为目录
-f file 文件存在且为普通文件
-e exist 文件存在
-r read 文件存在且可读
-s size 文件存在且文件大小不为0
-w write 文件存在且可写
-x exexutable 文件存在且可执行
-L link 文件存在且为链接文件
f1 -nt f2 newer than 文件f1比文件f2新
f1 -ot f2 olderthan 文件f1比文件f2旧
-n not zero 字符串的长度不为0
-z zero 字符串的长度为0
s1 = s2   字符串1等于字符串2
s1 != s2   字符串1不等于字符串2
==/= equal 相等
!= not equal 不相等
> greater than 大于
>= greater equal 大于等于
< less than 小于
<= less equal 小于等于
&& and
|| or
! not

(())测试操作符

  • ((<测试表达式>))
    • 常用与计算
    • 对于整数的关系运算,也可以使用Shell的算术运算符(())
((3>2)) && echo 1 || echo 0
((3!=2&&5==5)) && echo 1 || echo 0

猜你喜欢

转载自www.cnblogs.com/liangjingfu/p/9419493.html