所以我正在编写一个脚本,该脚本必须在执行之前检查文件是否存在。我有以下代码:
if [[ \( -d "DIR2" \) != true ]];
then
echo "nonexistent dir"
exit 1
elif [[ \( -d "DIR1" || -f "DIR1" \) != true ]];
then
echo "nonexistent dir or file"
exit 1
fi
因为我得到以下信息,所以我似乎对括号做错了什么:
./syncdir.sh: line 11: conditional binary operator expected
./syncdir.sh: line 11: syntax error near `-d'
./syncdir.sh: line 11: `if [[ \( -d "DIR2" \) != true ]];'
我觉得 bash 期待二元运算符不是 '!=' 很奇怪?
有人可以告诉我我做错了什么以及为什么吗?
我真的对括号感到困惑,我仍然没有掌握它。
最佳答案
您的条件语法完全错误。应该是:
if [[ -d "DIR2" ]];
和
if [[ ! ( -d "DIR1" || -f "DIR1" ) ]];
如果条件表达式中有圆括号,则不需要对它们进行转义(只有在使用 [
命令时才需要)。而且您不需要与 true
或 false
进行比较。
关于linux - 测试条件shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33048526/