1.shell文件return.shjava
echo 1shell
echo 2数组
echo 3spa
2.java文件Test.java日志
[java] code
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); } }
解释:orm
shell返回给java的值是经过echo完成的,java获取到的shell返回值是最后的echo值,因此上面的java所能获取到的值就是3。字符串
若是:你想把脚本执行的过程当中错误给记录下来,那么能够把return.sh修改以下:get
echo 1cmd
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 $?