首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行命令的if语句的实际值是多少?

问执行命令的if语句的实际值是多少?
EN

Stack Overflow用户
提问于 2018-04-11 15:14:42
回答 1查看 96关注 0票数 2

我不太明白下面的if-语句实际上做了什么,从条件输出可能是什么的意义上说:

代码语言:javascript
复制
if linux-command-1 | linux-command-2 | linux-command-3 > /dev/null

我的理解是:

  1. Linux 1被执行,它的输出被管道传输到2作为输入.
  2. Linux 2用LC1的输入执行,它的输出被管道传输到3中.
  3. Linux 3使用LC2的输入执行,它的输出被重定向到/dev/null,基本上不会出现。

,但是实际的if语句呢?是什么让它变得真实或错误呢?

为了进一步说明,下面是一个实际命令的示例:

代码语言:javascript
复制
if ps ax | grep -v grep | grep terminator > /dev/null
then
echo "Success"
else
echo "Fail"
fi

我确实知道,该功能的行为方式是,如果在执行过程中发生任何输出(进程正在运行),则条件为True,如果没有发生任何情况(进程未运行),则条件为False。

,但我不明白为什么或者怎么会得出这样的结论?shell if语句是否总是期望字符串输出为True?

我也刚刚发现了pgrep,但如果声明是

代码语言:javascript
复制
if pgreg -f terminator > /dev/null  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-11 15:32:11

在您的情况下,您正在测试grep本身的退出状态,如果没有匹配,返回false (1),如果有匹配,返回true (0)。

代码语言:javascript
复制
if ps ax | grep -v grep | grep terminator > /dev/null
then
  echo "Success"
else
  echo "Fail"
fi

您可以放置一个"-q“而不是重定向到/dev/null

代码语言:javascript
复制
if ps ax | grep -v grep | grep -q terminator 
then
  echo "Success"
else
  echo "Fail"
fi

我会执行我的逗号并测试$?

代码语言:javascript
复制
ps ax | grep -v grep | grep terminator
if [ $? -eq 0 ]; then
    echo 'it is ok'
else
    echo 'is is ko'
fi

如果你这样做了:

代码语言:javascript
复制
if linux-command-1 | linux-command-2 | linux-command-3 > /dev/null

只有最后一个命令的结果

如果每件事都很重要,就用"&&“代替

代码语言:javascript
复制
if  ps -ae | grep  'bash' | grep  'pty0' && ls . >/dev/null; then     
  echo "bash is in the house" 
fi

这将失败,因为没有not_exist

代码语言:javascript
复制
if  ps -ae | grep  'bash' | grep  'pty0' && ls not_exist >/dev/null; then     
  echo "bash is in the house" 
fi
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49778758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档