1.shell文件return.sh
echo 1
echo 2
echo 3
2.java文件Test.java
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws Exception {
// 定义传入shell脚本的参数,将参数放入字符串数组里
String cmds[] = new String[9];
cmds[0] = "/home/aiuap_cj/report/return.sh";
cmds[1] = "1"; // 任务省Id
cmds[2] = "2";// 插入任务人所属的纳税主体标识
cmds[3] = "3";// 任务期间
cmds[4] = "4";// 统计表单类型 (1:计算表,2:申报表)
cmds[5] = "5";// 插入任务人的二级公司Id
cmds[6] = "6";// 表名
cmds[7] = "7";
cmds[8] = "8";// 库名
// 执行shell脚本
Process pcs = Runtime.getRuntime().exec(cmds);
// 定义shell返回值
String result = null;
// 获取shell返回流
BufferedInputStream in = new BufferedInputStream(pcs.getInputStream());
// 字符流转换字节流
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// 这里也可以输出文本日志
String lineStr;
while ((lineStr = br.readLine()) != null) {
result = lineStr;
}
// 关闭输入流
br.close();
in.close();
System.out.println("==============================" + result);
}
}
shell返回给java的值是通过echo完成的,java获取到的shell返回值是最后的echo值,所以上面的java所能获取到的值就是3。
如果:你想把脚本执行的过程中错误给记录下来,那么可以把return.sh修改如下:
echo 1
echo 2
echo 3
rm -r /8888.txt 2>error.log
这里有一点问题在于你无法把命令执行过程中的错误信息给直接返回到java调用端,这个时候你可以把命令执行结果返回给java调用端,然后把产生的错误日志写入到制定文件中,之后通过读取日志文件来查看错误信息。
echo 1
echo 2
echo 3
rm -r /8888.txt 2>error.log
echo $?