在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'
我需要在一行上执行命令。
答案 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
将会执行。