shell脚本if语句是否从java执行?

时间:2014-07-28 18:52:53

标签: java shell unix

我正在尝试通过java程序执行unix命令。其中一些命令涉及if-then-fi语句。这可以通过java / Runtime类完成吗?好像它一次只处理1个命令。 我想做这样的事情:

grep 'Error One'   SystemErr.log > $HOME/tempFiles/output.txt
grep 'Error Two'   SystemErr.log >> $HOME/tempFiles/output.txt
grep 'Error Three' SystemErr.log >> $HOME/tempFiles/output.txt
.
.

if [ -s $HOME/tempFiles/output.txt ]
then
    mail -s "Subject here" "a@b.com" < $HOME/tempFiles/output.txt
fi

基本上,如果grep发现任何内容,我只想通过电子邮件发送文件(结果)。 我想使用java而不是直接shell脚本,以便我搜索的错误可以由数据库驱动,更容易更改。

我知道我可以自己在java中读取文件并自己搜索/解析它。但grep和其他unix命令有很多内置功能,我想用它来简化它。

任何想法,还是我完全走错了路?

1 个答案:

答案 0 :(得分:1)

这是一些代码,使用更简单的命令,但基本相同:

public static void main( String[] args ) throws Exception {
    try { 
        ProcessBuilder pb = new ProcessBuilder( "/bin/bash", "-c",
                   "echo one >/tmp/xxx && echo two >>/tmp/xxx && " +
                   "if [ -s /tmp/xxx ]; then cp /tmp/xxx /tmp/yyy; fi" );
        File log = new File( "/tmp/log.txt" );
        pb.redirectOutput(ProcessBuilder.Redirect.appendTo(log));
        Process process = pb.start();
        process.waitFor();
    } catch( Exception e ){
        // ...
    } catch( Error e ){
        // ...
    }
}

诀窍是将它全部放入一个shell命令中,以便您可以使用-c命令选项调用/ bin / bash。

如果编写此命令太复杂,请编写一个shell文件并将其作为源代码。