通常在为 bash shell 编写时,需要测试文件(或目录)是否存在(或不存在)并采取适当的措施。这些测试中最常见的是...
-e
- 文件存在,-f
- 文件是普通文件(不是目录或设备文件),-s
-文件大小不为零,-d
- 文件是目录,-r
- 文件具有读取权限,-w
- 文件具有写入权限,或 -x
执行权限(针对运行测试的用户)
这很容易证实,正如在这个用户可写目录中所展示的......
#/bin/bash
if [ -f "/Library/Application Support" ]; then
echo 'YES SIR -f is fine'
else echo 'no -f for you'
fi
if [ -w "/Library/Application Support" ]; then
echo 'YES SIR -w is fine'
else echo 'no -w for you'
fi
if [ -d "/Library/Application Support" ]; then
echo 'YES SIR -d is fine'
else echo 'no -d for you'
fi
➝ 不适合你 ✓
➝ 是 SIR -w 很好 ✓
➝ 是的 SIR -d 很好 ✓
我的问题,虽然看起来很明显,而且不太可能是不可能的 - 是如何简单地组合这些测试,而不必针对每种情况分别执行它们......不幸的是......
if [ -wd "/Library/Application Support" ]
▶ -wd: unary operator expected
if [ -w | -d "/Library/Application Support" ]
▶ [: missing `]'
▶ -d: command not found
if [ -w [ -d "/Library.... ]] & if [ -w && -d "/Library.... ]
▶ [: missing `]'
➝ 没有 -wd ✖
➝ 没有-w | -d 为你✖
➝ 没有 [ -w [ -d .. ]] ✖
➝ 没有 -w && -d ✖
我在这里错过了什么?
最佳答案
您可以对多个条件使用逻辑运算符,例如-a
用于AND
:
MYFILE=/tmp/data.bin
if [ -f "$MYFILE" -a -r "$MYFILE" -a -w "$MYFILE" ]; then
#do stuff
fi
unset MYFILE
关于bash - 一口气测试多个文件条件(BASH)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916559/