我不太明白以下if语句实际上是什么,从条件输出可能是什么意义:
if linux-command-1 | linux-command-2 | linux-command-3 > /dev/null
我理解执行如下:
但实际的if语句怎么样?对它成为真或假的责任是什么?
进一步详细说明,这里有一个实际命令的例子:
if ps ax | grep -v grep | grep terminator > /dev/null
then
echo "Success"
else
echo "Fail"
fi
我知道该功能的行为方式如果在该执行中发生任何输出(进程正在运行)条件为True,如果没有发生(进程未运行),则条件为False。
但我不明白为什么或如何得出这个结论? shell if语句是否始终期望字符串输出为True?
我刚刚发现了pgrep
,但如果声明是
if pgreg -f terminator > /dev/null
答案 0 :(得分:2)
在你的情况下,你正在测试grep本身的退出状态,如果没有匹配则返回false(1)如果有一个则返回true(0)
if ps ax | grep -v grep | grep terminator > /dev/null
then
echo "Success"
else
echo "Fail"
fi
你可以放一个" -q"而不是重定向到/ dev / null
if ps ax | grep -v grep | grep -q terminator
then
echo "Success"
else
echo "Fail"
fi
我会执行我的commad并测试$?
ps ax | grep -v grep | grep terminator
if [ $? -eq 0 ]; then
echo 'it is ok'
else
echo 'is is ko'
fi
如果你这样做:
if linux-command-1 | linux-command-2 | linux-command-3 > /dev/null
只有最后一个命令的结果
如果一切都很重要,请放置"&&"而是
if ps -ae | grep 'bash' | grep 'pty0' && ls . >/dev/null; then
echo "bash is in the house"
fi
因为没有not_exist
会失败if ps -ae | grep 'bash' | grep 'pty0' && ls not_exist >/dev/null; then
echo "bash is in the house"
fi