热爱技术,追求卓越
不断求索,精益求精

秒懂java,java执行shell脚本的方法,带参数并返回执行结果

一个简单的java执行shell脚本的代码片段(无参数)

下面是一个简单执行shell脚本,打印返回值的例子。

private static Logger LOG = LoggerFactory.getLogger("run");
private static String SH_PATH = "/var/www/data/work/sh/test.sh";

try {
    Process ps = Runtime.getRuntime().exec(SH_PATH);
    ps.waitFor();
    BufferedReader br = new BufferedReader(new InputStreamReader(
            ps.getInputStream()));
    StringBuffer sb = new StringBuffer();
    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line).append("\n");
    }
    String result = sb.toString();
    LOG.error(result);
} catch (Exception e) {
    LOG.error("发布异常", e);
}
return null;

写个工具类,用于调用执行shell脚本(可传参数)

runShell方法中的参数包括脚本文件路径以及参数,各个参数之间空格隔开

package cn.lovecto.util;

import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.List;

import com.google.common.collect.Lists;

/**
 * 执行shell脚本的工具类
 * 
 * @author Sean.Yang
 *
 */
public class ShellUtil {

    /**
     * 执行shell脚本
     *
     * @param shStr
     *            需要执行的shell, shStr包括需要执行的shell脚本的路径及参数,空格分隔
     * @return 返回执行脚本返回的每一行数据
     * @throws IOException
     * 
     */
    public static List<String> runShell(String shStr) throws Exception {
        List<String> results = Lists.newArrayList();
        // 注:如果sh中含有awk,一定要按new String[]{"/bin/sh","-c",shStr}写,才可以获得流
        Process process = Runtime.getRuntime().exec(
                new String[] { "/bin/sh", "-c", shStr }, null, null);
        InputStreamReader ir = new InputStreamReader(process.getInputStream());
        LineNumberReader input = new LineNumberReader(ir);
        String line;
        process.waitFor();
        while ((line = input.readLine()) != null) {
            results.add(line);
        }
        return results;
    }

}

使用上面的这个工具类就能够实现shell脚本的执行并返回执行的结果。如果需要判断返回码,则Process中也有相关判断返回码的方法。

赞(2)
未经允许不得转载:LoveCTO » 秒懂java,java执行shell脚本的方法,带参数并返回执行结果

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

热爱技术 追求卓越 精益求精