内联如果是shell脚本

Lon*_*don 35 linux shell scripting sh

是否可以在命令行中执行shell脚本,如下所示:

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true";
>
Run Code Online (Sandbox Code Playgroud)

以上示例不起作用我只得到>字符而不是我想要得到的结果,那就是"真实"

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

Sha*_*hin 62

它不起作用,因为你错过了fi结束你的if陈述.

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi
Run Code Online (Sandbox Code Playgroud)

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

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

另外,请注意@DigitalRoss'答案中ps -ef | grep ...提到的匹配问题.

更新

事实上,您可以通过以下方式做得更好pgrep:

if [ $(pgrep -c "myApplication") -eq 1 ]; then echo "true"; fi
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 6

是的,修复了语法问题

几乎奏效了.正确的语法是:

counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi
Run Code Online (Sandbox Code Playgroud)

但请注意,在涉及ps和的这种表达式中grep,grep通常会匹配自身,因为字符"grep -c Myapplication"出现在ps列表中.有几种方法可以解决这个问题,其中之一就是为了类似的东西[M]yapplication.


Wil*_*ell 5

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

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

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

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

(如果您需要变量计数器集供以后处理,这些解决方案都不合适.)

使用短路的&&和|| 运算符通常比嵌入if/then结构更清晰,特别是在单行中.