是否可以组合两个 Linux 条件?
Is it possible to combine two Linux conditions?
在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'
我需要命令在一行中执行。
是啊!您可以像这样使用 and 和 or 运算符:
echo "The short brown fox" | grep fox && echo found || echo not found
如果你也想抑制 grep
的输出以便你只看到 "found" 或 "not found",你可以这样做:
echo "The short brown fox" | grep fox >/dev/null && echo found || echo not found
&&
运算符和||
运算符短路,所以如果echo "The short brown fox" | grep fox >/dev/null
return一个真实的退出代码(0),那么echo found
将执行,并且由于 return 的退出代码为 0,因此 echo not found
将永远不会执行。
类似地,如果 echo "The short brown fox" | grep fox >/dev/null
return 是错误的退出代码 (>0),则 echo found
根本不会执行,而 echo not found
会执行。
您可以使用 { ...; }
将 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'
不要这样组合 ||
和 &&
;使用明确的 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
失败,则 a && b || c
不等价(尽管您可以使用 a && { b || c; }
,但 if
语句更具可读性) .
在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'
我需要命令在一行中执行。
是啊!您可以像这样使用 and 和 or 运算符:
echo "The short brown fox" | grep fox && echo found || echo not found
如果你也想抑制 grep
的输出以便你只看到 "found" 或 "not found",你可以这样做:
echo "The short brown fox" | grep fox >/dev/null && echo found || echo not found
&&
运算符和||
运算符短路,所以如果echo "The short brown fox" | grep fox >/dev/null
return一个真实的退出代码(0),那么echo found
将执行,并且由于 return 的退出代码为 0,因此 echo not found
将永远不会执行。
类似地,如果 echo "The short brown fox" | grep fox >/dev/null
return 是错误的退出代码 (>0),则 echo found
根本不会执行,而 echo not found
会执行。
您可以使用 { ...; }
将 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'
不要这样组合 ||
和 &&
;使用明确的 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
失败,则 a && b || c
不等价(尽管您可以使用 a && { b || c; }
,但 if
语句更具可读性) .