grep输出命令并在“if”语句中使用它,bash

时间:2013-11-07 14:14:25

标签: bash if-statement grep command output

好的,这是关于StarMade服务器的另一个。

以前我有这个用于检测崩溃的脚本,它只需搜索日志:

#!/bin/bash
cd "$(dirname "$0")"
if ( grep "[SERVER] SERVER SHUTDOWN" log.txt.0); then
sleep 7; kill -9 $(ps -aef | grep -v grep | grep 'StarMade.jar' | awk '{print $2}')
fi

它会找到“[SERVER] SERVER SHUTDOWN”并在此之后终止进程,但这不是一种防水方法,因为有了不同的错误,消息可能不会出现,导致这个脚本无用。 / p>

所以我有这个工具可以向服务器发送命令,但在服务器处于崩溃状态时返回EOF异常。我基本上想要获取这个命令的输出,并在上面的if语句中使用它,而不是当前的grep命令,这样当grep找到“java.io.EOFException”时它将执行下面的命令

我可以让它将输出写入文件然后从那里grep它,但我想知道,是不是有更好/更有效的方法来做到这一点?

编辑:好的,经过一番搜索,我把以下内容放在一起:

if ( java -jar /home/starmade/StarMade/StarNet.jar xxxxx xxxxx /chat) 2>&1 > /dev/null |grep java.io.EOFException);

这是一个有效的if语句吗?我需要它在第一个命令的输出中匹配“java.io.EOFException”,如果匹配,用“then”执行某些操作(使该部分工作)。

1 个答案:

答案 0 :(得分:0)

不确定是否可以解决您的问题,但这一行:

ps -aef | grep -v grep | grep 'StarMade.jar' | awk '{print $2}'

可以改为

ps -aef | awk '/[S]tarMade.jar/ {print $2}'

[S]阻止awk找到自己。


或者就像这样得到pid

pidof StarMade.jar