Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 一个if条件中的AND-OR条件_Bash_Shell - Fatal编程技术网

Bash 一个if条件中的AND-OR条件

Bash 一个if条件中的AND-OR条件,bash,shell,Bash,Shell,我有3个文件 File1=abc.txt File2=def.txt File3=xyz.txt 如果[-f$File1]&&&[-f$File2]&&&[-f$File3] 然后 #运行一些命令 否则,如果3个文件中的任何一个不存在,它应该告诉我们它是哪个文件。如果有两个文件不存在,那么它应该告诉这两个文件的名称 有人知道怎么做吗?以下脚本的第一个“如果”测试是否缺少一个(或多个)文件。 然后,如果文件丢失,文件上的“for”循环将单独检查每个文件,如果文件丢失,则显示其名称: File1=

我有3个文件

File1=abc.txt File2=def.txt File3=xyz.txt
如果[-f$File1]&&&[-f$File2]&&&[-f$File3]
然后
#运行一些命令
否则,如果3个文件中的任何一个不存在,它应该告诉我们它是哪个文件。如果有两个文件不存在,那么它应该告诉这两个文件的名称

有人知道怎么做吗?

以下脚本的第一个“如果”测试是否缺少一个(或多个)文件。 然后,如果文件丢失,文件上的“for”循环将单独检查每个文件,如果文件丢失,则显示其名称:

File1=abc.txt File2=def.txt File3=xyz.txt

if [ ! -f "$File1" -o ! -f "$File2" -o ! -f "$File3" ] ; then
    # At least one file is missing, writing the list of missing file(s):
    echo -n "Missing file(s): "
    for i in "$File1" "$File2" "$File3" ; do 
        if [ ! -f "$i" ] ; then
            echo -n "$i "
        fi
    done        
    echo 
else
    echo "No file is missing"
fi
考虑到切普纳下面的评论,一个更便携的版本似乎是:

File1=abc.txt File2=def.txt File3=xyz.txt
if [ ! -f "$File1" ] || [ ! -f "$File2" ] || [ ! -f "$File3" ] ; then
    # At least one file is missing, writing the list of missing file(s):
    echo -n "Missing file(s): "
    for i in "$File1" "$File2" "$File3" ; do 
        if [ ! -f "$i" ] ; then
            echo -n "$i "
        fi
    done        
    echo 
else
    echo "No file is missing"
fi

您可以轻松地将丢失的数据收集到一个数组中,然后从那里获取数据

缺少=()
对于abc.txt def.txt xyz.txt中的文件;做
测试-e“$file”&继续
缺少+=(“$file”)
完成
如果(“${#missing[@]}”==0);然后
#运行一些命令
其他的
回显“$0:缺少:${missing[@]}”>&2
fi

如果你想让它成为一个单行程序,就把它重构成一个函数;对于一个简单的演示,请参见

如果条件满足,为什么要从一个
中获得所有这些?不要使用
-o
;它是非标准的、模棱两可的、过时的<代码>[…]| |[…]|[…]
是首选。我认为| |和&&用于启动一系列子流程。i、 e:我认为只有当x返回true时,x&&y才会执行y。只有当x返回false时,x | | y才执行y。关于子流程的第一部分是false(您可能将
&
&
混合在一起);但是是的,
a | | b
仅在
a
失败时才意味着运行
b
。因此,
if[-f first]|【-f second]
如果存在
first
则立即成功,否则检查
second
是否存在,并返回该状态。@Jean LoupSabatier他们是;但是您正在为每个比较运行单独的
[
命令,而不是将每个表达式的布尔值组合到单个命令中。