java調用shell腳本參數
試試另一種方法
String[] cmd = {"/home/xiang/start.sh", "參數1", "參數2"};
Runtime.getRuntime().exec(cmd);
② shell腳本中調用JAVA 程序,如何讓JAVA運行結束後,再執行下面命令(只有java運行完,下面對數據的處理才有用)
調用java的時候不要掛在後台執行就可以了, 如果說你的java程序名叫 Test.class 或者 Test.jar
shell腳本里調用JAVA程序
#!/bin/sh
java Test.class ##或者java -jar Test.jar
stat=`sqlplus .......`
if [ $stat = "**"]
then
nohup sh single1.sh
fi
shell里的命令也是按順序執行的,java調用沒返回的時候是不會繼續往下執行的
如果你調用java程序的時候,命令後面帶了個 & 符,則這條命令是在後台執行的,shell會繼續執行下一條命令
③ 如何在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()這個加上。
④ java怎麼調用shell腳本
//用法:Runtime.getRuntime().exec("命令");Stringshpath="/test/test.sh";//程序路徑Processprocess=null;Stringcommand1=「chmod777」+shpath;try{Runtime.getRuntime().exec(command1).waitFor();}catch(IOExceptione1){e1.printStackTrace();}catch(InterruptedExceptione){e.printStackTrace();}Stringvar="201102";/參數Stringcommand2=「/bin/sh」+shpath+」」+var;Runtime.getRuntime().exec(command2).waitFor();