内联 if shell 脚本

新手上路,请多包涵

是否可以像这样在命令行中执行 shell 脚本:

 counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true";
>

上面的例子不起作用我只得到 > 字符不是我想要得到的结果,这是“真的”

当我执行 ps -ef | grep -c "myApplication 我得到 1 个输出。是否可以从脚本中的单行创建结果?谢谢你

原文由 London 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 651
2 个回答

它不起作用,因为您错过了 fi 来结束您的 if 语句。

 counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi

您可以使用以下方法进一步缩短它:

 if [ $(ps -ef | grep -c "myApplication") -eq 1 ]; then echo "true"; fi

另外,请注意 ps -ef | grep ... 匹配自身的问题,如 @DigitalRoss 的回答 中所述。

更新

事实上,您可以使用 pgrep

 if [ $(pgrep -c "myApplication") -eq 1 ]; then echo "true"; fi

原文由 Shawn Chin 发布,翻译遵循 CC BY-SA 3.0 许可协议

其他回复已解决您的语法错误,但我强烈建议您将行更改为:

 test $(ps -ef | grep -c myApplication) -eq 1 && echo true

如果您不想将出现次数限制为 1(例如,如果您只是尝试检查输出行 myApplication 并且您希望它永远不会出现超过一次),那么只需执行以下操作:

 ps -ef | grep myApplication > /dev/null && echo true

(如果您需要为以后的处理设置变量计数器,这些解决方案都不合适。)

使用短路 && 和 ||运算符通常比嵌入 if/then 结构要清晰得多,尤其是在单行中。

原文由 William Pursell 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题