如何在java程序中調用linux命令或者shell腳本

轉自:https://www.cnblogs.com/x_wukong/p/5148152.html


在java程序中如何調用linux的命令?如何調用shell腳本呢?


這裏不得不提到java的process類了。

process這個類是一個抽象類,封裝了一個進程(你在調用linux的命令或者shell腳本就是爲了執行一個在linux下執行的程序,所以應該使用process類)。

process類提供了執行從進程輸入,執行輸出到進程,等待進程完成,檢查進程的推出狀態,以及shut down掉進程。


至於詳細的process類的介紹放在以後介紹。

另外還要注意一個類:Runtime類,Runtime類是一個與JVM運行時環境有關的類,這個類是Singleton的。

這裏用到的Runtime.getRuntime()方法是取得當前JVM的運行環境,也是java中唯一可以得到運行環境的方法。(另外,Runtime的大部分方法都是實例方法,也就是說每次運行調用的時候都需要調用到getRuntime方法)

下面說說Runtime的exec()方法,這裏要注意的有一點,就是public Process exec(String [] cmdArray, String [] envp);這個方法中cmdArray是一個執行的命令和參數的字符串數組,數組的第一個元素是要執行的命令往後依次都是命令的參數,envp感覺應該和C中的execve中的環境變量是一樣的,envp中使用的是name=value的方式。

下面說一下,如何使用process來調用shell腳本

例如,我需要在linux下實行linux命令:sh test.sh,下面就是執行test.sh命令的方法:

這個var參數就是日期這個201102包的名字。

    String shpath="/test/test.sh";   //程序路徑

    Process process =null;

    String command1 = “chmod 777 ” + shpath;
    process = Runtime.getRuntime().exec(command1);
    process.waitFor();




    String var="201102";               //參數

    String command2 = “/bin/sh ” + shpath + ” ” + var; 
    Runtime.getRuntime().exec(command2).waitFor();

注意:

1

我爲什麼要使用 chmod 777命令呢?在有的機器上面,可能沒有設置權限問題。這是你在linux下面執行shell腳本需要注意的問題。沒有的話,就需要添加權限,就用chmod 777,否則在執行到Runtime.getRuntime().exec的時侯會出現Permission denied錯誤。

2

waitFor()這個也是必不可缺的,如果你需要執行多行命令的話,把waitFor()這個加上。



獲取執行結果

       public static void main(String args[]) {  

    1.         Process process = null;  
    2.         List<String> processList = new ArrayList<String>();  
    3.         try {  
    4.             process = Runtime.getRuntime().exec("ps -aux");  
    5.             BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));  
    6.             String line = "";  
    7.             while ((line = input.readLine()) != null) {  
    8.                 processList.add(line);  
    9.             }  
    10.             input.close();  
    11.         } catch (IOException e) {  
    12.             e.printStackTrace();  
    13.         }  
    14.   
    15.         for (String line : processList) {  
    16.             System.out.println(line);  
    17.         }  
    18.     }  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章