如何实现“shell调用Java并获取返回”

流程图

flowchart TD
A[shell脚本调用Java程序] --> B[编写Java程序]
B --> C[Java程序中调用shell命令]
C --> D[Java程序返回值给shell脚本]

步骤解析

  1. 编写Java程序:首先,我们需要编写一个Java程序,用于处理我们想要在shell脚本中调用的逻辑。在这个Java程序中,我们需要调用shell命令,并将返回值传递回shell脚本。

  2. Java程序中调用shell命令:在Java中调用shell命令有多种方法,我们可以使用Runtime.getRuntime().exec()方法或ProcessBuilder类来执行shell命令。这些方法将返回一个Process对象,通过该对象可以获取shell命令的执行结果。

    // 使用Runtime.getRuntime().exec()方法调用shell命令
    String command = "ls -l";
    Process process = Runtime.getRuntime().exec(command);
    
    // 使用ProcessBuilder类调用shell命令
    ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");
    Process process = processBuilder.start();
    
  3. Java程序返回值给shell脚本:在Java程序中,我们可以通过Process对象获取shell命令的返回值。通过调用process.getInputStream()方法可以获取shell命令的输出流,通过调用process.getErrorStream()方法可以获取shell命令的错误流。我们可以使用BufferedReader来读取这些流的内容,并将其返回给shell脚本。

    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line;
    StringBuilder output = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        output.append(line).append("\n");
    }
    int exitCode = process.waitFor();
    return output.toString();
    

代码示例

下面是一个完整的示例,展示了如何在shell脚本中调用Java程序,并获取Java程序的返回值。

首先,我们编写一个Java程序,名为ShellCall.java,其中包含一个方法executeShellCommand用于执行shell命令并返回结果。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ShellCall {

    public static void main(String[] args) {
        String command = "ls -l";
        String result = executeShellCommand(command);
        System.out.println(result);
    }

    public static String executeShellCommand(String command) {
        StringBuilder output = new StringBuilder();

        try {
            Process process = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }

            int exitCode = process.waitFor();
            if (exitCode == 0) {
                System.out.println("Command executed successfully.");
            } else {
                System.out.println("Command execution failed.");
            }

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        return output.toString();
    }
}

接下来,我们可以在shell脚本中调用这个Java程序,并获取Java程序的返回值。

#!/bin/bash

java -cp /path/to/ShellCall.jar ShellCall

在上述shell脚本中,我们使用java命令调用ShellCall类,并指定ShellCall.jar的路径作为类路径。

总结

通过以上步骤,我们可以实现在shell脚本中调用Java程序,并获取Java程序的返回值。首先,我们需要编写一个Java程序,其中调用了shell命令并返回结果。然后,我们可以在shell脚本中使用java命令来调用这个Java程序,并获取Java程序的返回值。

希望这篇文章对你有所帮助!