bash - 一口气测试多个文件条件(BASH)?

标签 bash testing scripting syntax

通常在为 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/

相关文章:

bash - 在 bash 中快速引用标准输出(即上一个命令的输出)?

linux - 用于列出终端前台进程组中所有进程的 Bash 脚本

perl - 我如何使用 Perl 来测试 C 程序?

python - 使用 python 搜索/替换 html 文件中的文本

bash - Bash 如何对脚本进行标记?

bash - 如何安全地引用可选标志?

php - 无法使用 App::Laravel 中的错误定义测试代码

ruby - 如何使用 Cucumber/Capybara 从 txt/xls 文件导入数据?

scripting - 检查终端中的重复项?

unix - 是否可以在 UNIX 环境中运行 VBScript?