一次测试多个文件条件(BASH)?

前端之家收集整理的这篇文章主要介绍了一次测试多个文件条件(BASH)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通常当为bash shell编写时,需要测试文件(或目录)是否存在(或不存在)并采取适当的措施。这些测试中最常见的是…

-e – 文件存在,-f – 文件是常规文件(不是目录或设备文件),-s – 文件不是零大小,-d – 文件是目录,-r – 文件具有读取权限,-w – 文件具有写入或-x执行权限(对运行测试的用户)

这很容易确认,在这个用户可写的目录上演示….

  1. #/bin/bash
  2.  
  3. if [ -f "/Library/Application Support" ]; then
  4. echo 'YES SIR -f is fine'
  5. else echo 'no -f for you'
  6. fi
  7.  
  8. if [ -w "/Library/Application Support" ]; then
  9. echo 'YES SIR -w is fine'
  10. else echo 'no -w for you'
  11. fi
  12.  
  13. if [ -d "/Library/Application Support" ]; then
  14. echo 'YES SIR -d is fine'
  15. else echo 'no -d for you'
  16. fi

➝没有-f为你✓
➝是SIR -w很好✓
➝是SIR -d很好✓

我的问题,虽然看起来很明显,并且不可能是不可能的 – 是如何简单地组合这些测试,而不必为每个条件单独执行…不幸的是…

  1. if [ -wd "/Library/Application Support" ]
  2. -wd: unary operator expected
  3.  
  4. if [ -w | -d "/Library/Application Support" ]
  5. [: missing `]'
  6. ▶ -d: command not found
  7.  
  8. if [ -w [ -d "/Library.... ]] & if [ -w && -d "/Library.... ]
  9. ▶ [: missing `]'

➝没有-wd为你✖
➝没有-w | -d为你✖
➝没有[-w [-d ..]]为您
➝没有 – && -d为你✖

我在这里失踪了什么?

您可以对多个条件使用逻辑运算符,例如-a用于AND:
  1. MYFILE=/tmp/data.bin
  2. if [ -f "$MYFILE" -a -r "$MYFILE" -a -w "$MYFILE" ]; then
  3. #do stuff
  4. fi
  5. unset MYFILE

猜你在找的Bash相关文章