一个简单的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中也有相关判断返回码的方法。