执行命令的if语句的实际值是什么?

时间:2018-04-11 15:14:42

标签: linux shell

我不太明白以下if语句实际上是什么,从条件输出可能是什么意义:

if linux-command-1 | linux-command-2 | linux-command-3 > /dev/null

我理解执行如下:

  1. Linux Command 1被执行,它的输出被PIPED输入Linux-Command-2作为输入。
  2. Linux命令2通过LC1的输入执行,它的输出被PIPED输入Linux-Command-3。
  3. Linux命令3通过LC2的输入执行,它的输出被重定向到/ dev / null,基本上没有出现。
  4. 但实际的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  
    

1 个答案:

答案 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