當前位置:首頁 » 操作系統 » linuxshjava

linuxshjava

發布時間: 2024-11-19 16:29:49

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()這個加上。

熱點內容
盲井ftp 發布:2024-11-19 18:21:38 瀏覽:264
悅虎二代安卓如何看電量 發布:2024-11-19 18:19:27 瀏覽:295
人工駕駛編程 發布:2024-11-19 18:05:20 瀏覽:271
java編程試題 發布:2024-11-19 17:26:37 瀏覽:664
python顯示二進制文件 發布:2024-11-19 17:26:36 瀏覽:147
excel中編程 發布:2024-11-19 17:23:32 瀏覽:549
android透明圖片 發布:2024-11-19 17:01:50 瀏覽:163
iis上傳文件限制 發布:2024-11-19 16:37:55 瀏覽:408
面試題演算法 發布:2024-11-19 16:30:25 瀏覽:547
oracle存儲過程debug 發布:2024-11-19 16:30:25 瀏覽:234