test 命令操作主要配合比较运算符进行,可大体分为文件判断 / 数组比较 / 字符串判断 / 逻辑运算等
语法格式为 test expression, 当 test 判断 expression 为成立时,返回状态为 0,否则为非 0 值。
test 命令还可以简写为 [ ], 需要在两边中括号与 expression 是有一个空格,这个空格是必须的,否则会导致语法错误。[] 的写法更加简洁,比 test 使用频率更高。

1、数值比较
  1. # 使用test expression方式
  2. if test 10 -eq 1;then
  3. echo '10不等于1'
  4. else
  5. echo '10等于1'
  6. fi
  7. # 使用[ ]简写方式(推荐)
  8. if [ 10 -eq 1 ];then
  9. echo '10不等于1'
  10. else
  11. echo '10等于1'
  12. fi

2、文件判断
  1. FILE=$1
  2. # 使用[ ]简写方式
  3. if [ -e ${FILE} ]
  4. then
  5. echo "文件或目录存在"
  6. if [ -d ${FILE} ]
  7. then
  8. echo "${FILE}是目录"
  9. else
  10. echo "${FILE}是文件"
  11. fi
  12. else
  13. echo "文件或目录不存在"
  14. fi
  15. # 使用test expression方式
  16. if test -e ${FILE}
  17. then
  18. echo "文件或目录存在"
  19. if test -d ${FILE}
  20. then
  21. echo "${FILE}是目录"
  22. else
  23. echo "${FILE}是文件"
  24. fi
  25. else
  26. echo "文件或目录不存在"
  27. fi

3、字符串比较
  1. STR1="linux"
  2. STR2="shell"
  3. if [ STR1 = STR2 ];then
  4. echo "${STR1} = ${STR2}"
  5. else
  6. echo "${STR1} != ${STR2}"
  7. fi

4、逻辑运算

如果需要在一个 test 中执行多个判断,需要使用 [[]], test 是 Shell 内置关键字,不是命令,免除函数传递过程,因此更加建议使用 [[]]。双中括号有以下注意事项:

  • 不需要把变量名用双引号 "" 包围起来,即使变量是空值,也不会出错;
  • 不需要、也不能对 >、< 进行转义,转义后会出错;
  • 其支持正则表达式,组合逻辑可以不使用 test 的 - a,-o 而使用 && ||。

与逻辑运算符号对应的 && 可以使用 -a|| 可以使用 -o 来替换。

  1. NUM1=1
  2. NUM2=2
  3. if [[ ${NUM1} -lt 5 && ${NUM2} -gt 5 ]];then
  4. echo "true"
  5. else
  6. echo "false"
  7. fi