是否可以结合两个Linux条件?

时间:2017-02-16 15:00:15

标签: csh

在Linux中,您可以执行简单的命令行条件,例如。

echo 'The short brown fox' | grep -q 'fox' && echo 'Found' || echo 'Not Found'

>> Found

test -e test.txt && echo 'File Exists' || echo 'File Not Found'
>> File exists

是否可以将这两个条件合并为一个?因此,如果找到狐狸,我们会查看文件是否存在,然后相应地执行条件。

我尝试过以下操作,但它们似乎不起作用:

echo 'The short brown fox' | grep -q 'fox' && (test -e test.txt && echo 'File Exists' || echo 'File Not Found') || echo 'Fox Not Found'

echo 'The short brown fox' | grep -q 'fox' && `test -e test.txt && echo 'File Exists' || echo 'File Not Found'` || echo 'Fox Not Found'

我需要在一行上执行命令。

3 个答案:

答案 0 :(得分:2)

您可以使用{ ...; }在shell中对多个命令进行分组,如下所示:

echo 'The short brown fox' | grep -q 'fox' &&
{ [[ -e test.txt ]] && echo "file exists" || echo 'File Not Found'; } || echo 'Not Found'

大括号内的所有命令即{ ...; }将在grep成功时执行,||{ ...; }之外的grep评估失败。{ / p>

修改

这是csh一个班轮做同样的事情:

echo 'The short brown ox' | grep -q 'fox' && ( [ -e "test.txt" ] && echo "file exists" || echo 'File Not Found' ; ) || echo 'Not Found'

答案 1 :(得分:2)

不要像这样结合||&&;使用明确的if语句。

if echo 'The short brown fox' | grep -q 'fox'; then
    if test -e test.txt; then
        echo "File found"
    else
        echo "File not found"
    fi
else
    echo "Not found"
fi
如果a && b || c成功且a失败,则

b不等效(尽管您可以使用a && { b || c; },但if语句更具可读性。)< / p>

答案 2 :(得分:0)

呀!你可以使用这样的和和或运算符:

echo "The short brown fox" | grep fox && echo found || echo not found

如果您想要抑制grep的输出,以便只看到“找到”或“未找到”,您可以执行以下操作:

echo "The short brown fox" | grep fox >/dev/null && echo found || echo not found

&&运算符和||运算符是短路的,因此如果echo "The short brown fox" | grep fox >/dev/null返回一个真正的退出代码(0),那么echo found将会执行,因此还返回退出代码0,echo not found永远不会执行。

同样,如果echo "The short brown fox" | grep fox >/dev/null返回假名退出代码(&gt; 0),则echo found根本不会执行,echo not found将会执行。