標籤:
轉自:http://blog.csdn.net/tengdazhang770960436/article/details/12014839
1.shell檔案return.sh
echo 1
echo 2
echo 3
2.java檔案Test.java
[java] view plain copy
- 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 $?
java調用shell擷取傳回值