第14章 测试和判断

14.1 测试

程序运行中经常需要根据实际情况来运行特定的命令或代码段。比如,判断某个文件或目录是否存在,如果文件或目录不存在,可能需要首先创建文件或目录。举例说,要判断文件varlog/message文件是否存在,可以先ls该文件,然后用$?来判断,如下所示:


  1. #ls

  2. 一个存在的文件

  3. [root@localhost ~]# ls varlog/messages

  4. varlog/messages

  5. #

  6. 如果ls

  7. 成功,则$?

  8. 返回值为0

  9. ,说明该文件存在

  10. [root@localhost ~]# echo $?

  11. 0

  12. #ls

  13. 一个不存在的文件,命令本身会报错

  14. [root@localhost ~]# ls varlog/messages01

  15. ls: varlog/messages01: No such file or directory

  16. #

  17. 这里$?

  18. 的返回值是非0

  19. 的,在不考虑文件权限的情况下,返回非0

  20. 值说明文件是不存在的

  21. [root@localhost ~]# echo $?

  22. 2


上述的办法确实是一种办法,但是这意味着在很多情况下都需要自己来实现这个“判断”的过程,判断为真则返回0,为假则返回非0值。这种判断行为被称作“测试”。

实际上Shell已经实现了很多测试功能,这些测试语句不但使用起来非常简单,还能在少写代码的情况下实现同样的功能,最重要的是能让代码看起来更为清晰。