java調用shell獲取返回值

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 $?

相關文章
相關標籤/搜索