在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能不能把这两个条件结合在一起呢?因此,如果找到了fox,我们将查看文件是否存在,然后相应地执行条件。
我试过以下几种方法,但它们似乎不起作用:
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'我需要命令在一条线上进行。
发布于 2017-02-16 15:06:30
可以使用{ ...; }对shell中的多个命令进行分组,如下所示:
echo 'The short brown fox' | grep -q 'fox' &&
{ [[ -e test.txt ]] && echo "file exists" || echo 'File Not Found'; } || echo 'Not Found'大括号中的所有命令(即{ ...; } )都将在grep成功时执行,而{ ...; }外的||将被计算为grep失败。
编辑:
下面是csh一条班轮在做同样的事情:
echo 'The short brown ox' | grep -q 'fox' && ( [ -e "test.txt" ] && echo "file exists" || echo 'File Not Found' ; ) || echo 'Not Found'发布于 2017-02-16 15:19:40
不要像这样组合||和&&;使用显式的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成功且b失败(虽然可以使用a && { b || c; },但if语句的可读性更强),则b不是等效的。
发布于 2017-02-16 15:05:11
嗯!您可以像这样使用and或操作符:
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返回一个falsey代码(>0),那么echo found将完全不执行,而echo not found将执行。
https://stackoverflow.com/questions/42277518
复制相似问题