bash 脚本中的逻辑 AND

Pep*_*101 12 bash shell-script

我的ifbash 脚本中有一个必须检查这两个文件中的一个是否存在,如果它们不存在,它应该回显匹配。

我有代码:

if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
 echo "match"
fi
Run Code Online (Sandbox Code Playgroud)

但这似乎出于某种原因不起作用。

我 110% 确定这两个文件不存在。我没有收到任何错误,只是没有输入if.

我是 bash 脚本的新手,所以我不确定可能出了什么问题。

bah*_*mat 15

如果你想要那么你想要OR,而不是AND

if [[ ! -f /etc/benchmarking/code ]] || [[ ! -f /etc/benchmarking/code.class ]]; then
 echo "match"
fi
Run Code Online (Sandbox Code Playgroud)
  • 如果缺少一个或两个文件,这将匹配。
  • 只有match两者都不存在时,您的代码才会打印。

但是,你说:

我 110% 确定这两个文件不存在。我没有收到任何错误,只是没有输入 if。

所以你的说法自相矛盾。如果您正在运行代码,至少必须存在其中一个文件。

如果您想查看if语句的评估方式,请使用-x.

#!/bin/bash -x
if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then
 echo "match"
fi
Run Code Online (Sandbox Code Playgroud)

然后你会看到执行。

$ ./test.sh
+ [[ ! -f /etc/benchmarking/code ]]
+ [[ ! -f /etc/benchmarking/code.class ]]
+ echo match
match
$ 
Run Code Online (Sandbox Code Playgroud)


dai*_*isy 3

不应该是这样吗?A是一个文件或者B是一个文件,然后blabla。

if [[ -f /etc/benchmarking/code ]] || [[ -f /etc/benchmarking/code.class ]]; 
then  
  echo "match"
fi
Run Code Online (Sandbox Code Playgroud)