语法

条件测试语法 说明
test <测试表达式> test命令和< 测试表达式>之间至少有一个空格
[ <测试表达式> ] 和test 表达式相同,[] 的边界和测试表达式至少有一个空格
[[<测试表达式>]] 在[[]](双中括号)中可以使用通配符等进行模式匹配,这是其区别于其他几种语法格式的地方。&&、||、>、<等操作符可以应用于[[]]中,但不能应用于[]中,在[]中一般用-a、-o、-gt(用于整数)、-lt(用于整数)代替上述操作符。
((<测试表达式>)) 一般用于if 语句里

test条件测试

语法

  1. test <测试表达式>

如果字符串长度为0 表达式成立 ,否则不成立,&&是并且的意思,|| 表示不符合是输出

  1. #! /bin/bash
  2. char="hello"
  3. test -z "${char}" && echo true || echo false
  4. char=""
  5. test -z "${char}" && echo true || echo false

判断文件是否存在

  1. #! /bin/bash
  2. echo "hello world" > hello.txt
  3. test -f hello.txt && echo 0 || echo 1
  4. rm hello.txt
  5. test -f hello.txt && echo 0 || echo 1

中括号条件测试

语法

  1. [ <测试表达式> ]

注意:中括号内部的两端要有空格,[]和test等价,即test的所有判断选项都可以直接在[]里使用。
如果双中括号里的表达式成立(为真),则执行&&后面的命令,否则执行||后面的命令。

  1. #! /bin/bash
  2. touch foo.txt
  3. [ -f foo.txt ] && echo 0
  4. [ -f bar.txt ]|| echo 1

打印结果

  1. 0
  2. 1

双中括号条件测试

语法

  1. [[ <测试表达式> ]]

注意:双中括号里的两端也要有空格。

  1. #! /bin/bash
  2. touch foo.txt
  3. [[ -f foo.txt ]] && echo 0
  4. [[ -f bar.txt ]]|| echo 1

[[]]表达式与[]和test用法的选项部分是相同的,其与[]和test测试表达式的区别在于,在[[ ]]中可以使用通配符等进行模式匹配;并且&&、||、>、<等操作符可以应用于[[ ]]中,但不能应用于[ ]中,在[ ]中一般使用-a、-o、-gt(用于整数)、-lt(用于整数)等操作符代替上文提到的用于[[]]中的符号。