linuxshjava
A. 通過java程序(JSch)運行遠程linux主機上的shell腳本
通過Java程序運行遠程Linux主機上的shell腳本是可能的,這需要藉助JSch庫來實現。
在使用之前,請確保遠程主機已經開啟SSH服務。接下來,通過Maven坐標引入JSch依賴庫,以執行遠程主機上的腳本。
創建名為「hello.sh」的文件,內容僅用於測試,即輸出「hello 」。將此文件保存在遠程主機的「/root」目錄下,並為腳本設置可執行許可權。
使用以下Java代碼在本地執行遠程主機上的shell腳本,代碼中包含了詳細的注釋以說明其功能。執行後,可以在本地控制台獲取遠程主機上shell腳本的執行結果。
實例代碼演示了如何實現遠程Linux主機上的shell腳本執行。此外,代碼可以通過進一步封裝來提供更簡便的使用方式。
總結,通過Java程序和JSch庫可以輕松運行遠程Linux主機上的shell腳本,並獲取執行結果。
B. 在linux上單獨用shell腳本可以完成文件上傳,可是使用java來調用這個shell腳本卻提示無法連接
不要用sh來運行,用bash。sh 應該不支持here doc。
Process process = Runtime.getRuntime().exec(new String[] {
"sh", "/ftpfile"});
==>
Process process = Runtime.getRuntime().exec(new String[] {
"bash", "/ftpfile"});
C. 怎麼在java中執行linux 命令 netstat -nat|grep -i "80"|wc -l
或許這就是你想要的 package question.save; import java.io.InputStreamReader; import java.io.LineNumberReader;/*** java在linux環境下執行linux命令,然後返回命令返回值。 * @author lee*/public class ExecLinuxCMD { public static Object exec(String cmd) {try {String[] cmdA = { /bin/sh, -c, cmd }; Process process = Runtime.getRuntime().exec(cmdA); LineNumberReader br = new LineNumberReader(new InputStreamReader( process.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { System.out.println(line); sb.append(line).append(\n);}return sb.toString(); } catch (Exception e) { e.printStackTrace();}return null;} public static void main(String[] args) { // TODO Auto-generated method stub String pwdString = exec(pwd).toString(); String netsString = exec(netstat -nat|grep -i \80\|wc -l).toString(); System.out.println(==========獲得值=============); System.out.println(pwdString); System.out.println(netsString);}}輸出結果:/home/lee/program/workspace/java/test20==========獲得值=============
D. 如何在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()這個加上。